Prime Number Test始终返回true

时间:2014-02-26 00:53:51

标签: java primes

所以我刚刚启动了一些java,我试图让用户输入一个数字并测试它是否是素数。这是我对该程序的循环。

do{
        for(testNumber = 2; testNumber < numb; testNumber++){
            if(numb % testNumber == 0){
                test = false;
            }else{ 
                test = true;
            }
        }

        if(test = true){
            System.out.println("The number is prime.");
        }else{
            System.out.println("The number is not prime.");
        }

        System.out.println("Enter a number. Enter 0 to exit.");
        numb = number.nextInt();

    }while(numb != 0);

输入的每个数字都变为真实!对我来说逻辑似乎是正确的。

4 个答案:

答案 0 :(得分:3)

if(test = true){

应该是

if(test == true){

第一个是“assignment”运算符,第二个是逻辑(相等测试)运算符。详细了解official documentation


注意

我不会评论您的代码的其他部分作为学习练习。您的代码可以进行优化和改进!你走在正确的轨道上。坚持下去!

答案 1 :(得分:2)

首先,您正在使用赋值运算符=testtrue进行比较,从而导致test始终为true。它已经是boolean,只需使用它而无需进行无关的比较:

if(test){

其次,您在每个test循环迭代中覆盖for的值。将其初始化为true,如果找到因素,则只将其设置为false

test = true;
for(testNumber = 2; testNumber < numb; testNumber++){
    if(numb % testNumber == 0){
        test = false;
    }
}

此外,您无需测试testNumber超过数字numb的平方根。

int limit = (int) Math.sqrt(numb);
for(testNumber = 2; testNumber <= limit; testNumber++){

答案 2 :(得分:0)

如果找到它并且条件== true

,您应该中断
do{
        for(testNumber = 2; testNumber < numb; testNumber++){
            if(numb % testNumber == 0){
                test = false;
                break;
            }else{ 
                test = true;
            }
        }

        if(test == true){
            System.out.println("The number is prime.");
        }else{
            System.out.println("The number is not prime.");
        }

        System.out.println("Enter a number. Enter 0 to exit.");
        numb = number.nextInt();

    }while(numb != 0);

答案 3 :(得分:0)

你有两个问题。首先,考虑一下你的循环逻辑:你在循环的每次传递中都主动设置test变量。由于循环在numb - 1处结束,因此在最后一次传递中它几乎总是将test设置为true。相反,在循环之前将test设置为true,如果找到一个因素,则只将其设置为false:一旦检测到它,就会将其设为false&#39} ;不是素数。 (将该循环置于单独的方法中,以便您可以立即return更好。)

isPrime = true;
for(int factor = 2; factor < numb; factor++) { // see below for advice on condition
    if(numb % factor == 0)
        isPrime = false;
}

其次,您在test声明中设置 if。您必须使用==来检查是否相等,而在Java中,使用if(test)会更加惯用。

作为一种风格问题,名为test的变量不是很具描述性。我建议使用上面使用的isPrime名称。

最后,您只需要检查testNumber的平方根,但不要使用浮点运算然后截断结果,否则您可能会错过精确的平方根因子