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 循环之外,但即使这样也不起作用。我现在很沮丧。请有人解决我的问题。
当你发现该数字不是质数时,你必须告诉程序退出:
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
。
您的代码陷入无限循环,因为增加
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"
。