【问题标题】:Prime Number code素数代码
【发布时间】:2013-11-17 02:46:58
【问题描述】:

首先让我说我知道有很多关于素数的问题,这更多是关于我的代码,特别是布尔语句。

public class SumPrime
{


public static void main(String[] args) {


     int top = inputInt("enter the number please");   
     int sum;
     if (top > 2) {
        sum = 2;
    } else {
        sum = 0;
    }
     int i;
     int l;

     for(l=3; l<top; l+=2){

        boolean k = test(l);
        String r;
        if(k = true){
          sum=sum+l;

          output(l);
        }else {
            sum=sum;
        }

    }
    System.out.println("The sum is " + sum);
    }


static boolean test(int v) {

   if (v%2==0) 
      return false;
   for(int i=3; i<v; i+=2) {
       if(v%i==0)
          return false;
    }
    return true;
}

我正在尝试编写一个程序,该程序将为我提供低于输入值的素数总和。 在上面的代码下面,我有输入/输出语句,所以这不是问题。至少在我看来,这段代码应该可以毫无问题地工作。我对 java 比较陌生,对布尔变量和语句也很陌生,所以很容易出现问题。 (我搜索了一个答案,一无所获)

测试子程序应该检查一个数字是否是素数,如果是则返回true,如果不是则返回false。它似乎对每个值都返回 true,即使对于不是素数的数字也是如此。如果我输入 10 作为上限,则程序返回总和 26,而不是 17。即使它应该检查素数,它似乎也包括了所有奇数。

我无法弄清楚为什么这段代码不起作用。就像我说的,我认为错误与布尔方法有关。

【问题讨论】:

  • 使用调试器并逐步执行您的 test 方法。看起来是正确的;如果你是在编辑器中手动编写的,你确定你已经重新编译了吗?
  • 我使用 BlueJ,是的,我重新编译了。它编译得很好,它只包括所有赔率,而不仅仅是素数。
  • 首先,corn3lius 的回答似乎解决了你的整个问题。但是……在未来,只是你一个调试器,并逐行遍历可疑的方法。一步一步看看实际发生了什么。
  • 好的,感谢您的回答。你会推荐什么调试器?
  • Eclipse、Netbeans、IntelliJ、System.out.println...随便挑一个吧:)

标签: java primes


【解决方案1】:

如果你用这个测试 9,那么 i

static boolean test(int v) {

   if (v%2==0) 
      return false;
   for(int i=3; i<v; i+=2) {
       if(v%i==0)
          return false;
    }
    return true;
}

编辑:

你也不应该测试超过目标数一半的素数,理想的最大值是 sqrt(x) + 1

【讨论】:

    【解决方案2】:

    您的问题与您的布尔方法无关。你的条件不好。您正在条件中执行分配,而不是实际测试相等性。因此,它的计算结果始终为 true,而您最终会在不应该添加的地方添加。

    改为这样做:

    if (k) {
      sum += l;
    }
    

    顺便说一句,sum = sum 没有任何作用,也应该删除。

    【讨论】:

    • 谢谢!! “if(k=true)”的含义有什么问题..“if(k)”没有做什么?
    • k = true 不是条件。这是一个任务。换句话说,您没有测试k 是否为真。您将true 分配给k。同时,k 已经具有来自test 的值。所以你可以做if (k)。或者,您可以使用if (k == true)(注意双等号),但人们通常不会这样做。
    猜你喜欢
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    相关资源
    最近更新 更多