我的质数代码有什么错误?

问题描述 投票:0回答:2
import java.util.*;
class PrimeNumber {
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int d = 2;    
    while(d < n) {
        if(n % d == 0) {
            System.out.println("Composite");
        }
        else {
            d++;
        }
    }
    System.out.println("Prime");
}
}

我已经学习Java大约一周了,收到学长的提问,要求制作一个区分素数和合数的程序,我尝试制作一个程序,但没有得到所需的输出。打印对于素数效果很好,但对于复合数则不然,它会无休止地打印非素数的复合数。我尝试在复合打印语句中添加一个break语句,但它不起作用。它首先打印复合数,并为复合数添加素数,因为我试图将素数打印语句放在 while 循环之外,但即使这样也不起作用。我现在很沮丧。请有人解决我的问题。

java loops primes
2个回答
0
投票

当你发现该数字不是质数时,你必须告诉程序退出:

import java.util.*;

class PrimeNumber {
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int d = 2;    
    while(d < n) {
        if(n % d == 0) {
            System.out.println("Composite");
            return;
        }
        else {
            d++;
        }
    }
    System.out.println("Prime");
}
}

打印后请注意

return


0
投票

您的代码陷入无限循环,因为增加

d++
变量的语句
d
只在
else
块中执行。但是当
if()
块执行时,
n
d
都没有改变。这意味着条件
d < n
也永远不会改变。结果始终为
true
(输入后),检查
if(n % d == 0)
也将为
true
(输入后)。您必须将
d++
语句移动到 always 执行的位置。您可以考虑使用
for()
循环从
2
n
进行计数。

此外,底部还有一个

System.out.println("Prime");
,当
while()
循环退出时会打印该内容。即使你找到合数并退出
while()
循环,你仍然会无条件地打印这
"Prime"
行。这就是为什么在这种情况下它总是说“Prime”。根据您构建代码的方式,您可以使用
isPrime
类型的辅助变量
bool
首先检查该数字是否为质数。之后,检查
isPrime
变量的值并打印
"Prime"
"Composite"

© www.soinside.com 2019 - 2024. All rights reserved.