Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 素数测试总是返回true_Java_Primes - Fatal编程技术网

Java 素数测试总是返回true

Java 素数测试总是返回true,java,primes,Java,Primes,所以我刚刚启动了一些java,我试图让用户输入一个数字,并测试它是否为素数。这是我为这个节目做的循环 do{ for(testNumber = 2; testNumber < numb; testNumber++){ if(numb % testNumber == 0){ test = false; }else{ test = true;

所以我刚刚启动了一些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);
do{
for(testNumber=2;testNumber

输入的每个数字都是真的!在我看来,这个逻辑似乎是正确的。

如果你找到了它,并且如果条件==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);
do{
for(testNumber=2;testNumber
首先,您使用赋值运算符
=
测试
进行比较,这会导致
测试
始终为
。它已经是一个
布尔值
,只需使用它,而不需要进行额外的比较:

if(test){
其次,您正在为
循环迭代在每个
中覆盖
test
的值。将其初始化为
true
,并且仅在找到因子时才将其设置为
false

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

if(test == true){
第一个是“”运算符,第二个是逻辑(相等测试)运算符。请阅读更多关于



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

您有两个问题。首先,考虑您的循环逻辑:您在循环的每次传递上都积极地设置
test
变量。由于循环结束于
numb-1
,因此它几乎总是在最后一次通过时将
test
设置为
true
。相反,在循环之前将
test
设置为
true
,如果找到一个因子,则仅将其设置为
false
:一旦检测到它不是prime,就会将其保留为
false
。(将该循环放在一个单独的方法中,这样您就可以
立即返回
,这样做会更好。)

isPrime=true;
对于(int-factor=2;factor
其次,在
if
语句中设置
test
。您必须使用
==
来检查是否相等,在Java中,只使用
if(test)
更为惯用

就样式而言,名为
test
的变量不太具有描述性。我建议使用我上面使用的
isPrime
名称


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

这个问题已经被问了很多次了。。。寻找一个素数生成器并从中学习。一些建议:如果你想让它更快,设置你的循环,这样你就不会测试偶数,你只会测试到numb/2取整。西方最快的枪是多少?:)您可能需要
(int)Math.ceil(Math.sqrt(numb))
。永远不知道什么时候你会有一个无穷小的底流并截断一个
.9999999999
。谢谢,删除“=true”是有效的。似乎不起作用?我输入4,但程序仍将其打印为素数。您在我编辑条件后尝试过吗?休息会让你的节目更快捷,我补充说休息;测试后=假;但是它仍然显示4是素数。如果(test==true)不是如果(test=true)这是编辑哦,对不起,没有看到。是的,成功了。谢谢。仅供参考,我不认为截断
Math.sqrt
的结果对于
int
来说是个问题,因为
int
是32位,
double
有52位尾数。我刚刚运行了一个测试,我不认为有任何
int
会失败<代码>长
可能是个问题。
if(test = true){
if(test == true){
isPrime = true;
for(int factor = 2; factor < numb; factor++) { // see below for advice on condition
    if(numb % factor == 0)
        isPrime = false;
}