我一直试图在程序中找到错误大约30分钟,这让我很烦。如果您将第一个数字输入为2而第二个数字输入为9,则输出为:3 4 5 6 7 8.它只显示两者之间的数字而不是两者之间的素数。这是代码:(请帮助)
public class PrimeNumber {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int num1, num2, counter;
boolean prime = true;
Scanner input = new Scanner(System.in);
System.out.print("Enter an integer: ");
num1 = input.nextInt();
System.out.print("Enter an integer greater than the previous: ");
num2 = input.nextInt();
input.close();
for (int k = num1; k <= num2; k++){
prime = true;
for (int j = num2; j <= k; j++){
if (k % j == 0){
prime = false;
}
}
if (prime == true){
System.out.println(k);
}
}
}
}
答案 0 :(得分:0)
内部循环从不执行if
内部,除非j == k == num2
。
答案 1 :(得分:0)
正如@Scott Hunter和其他人指出的那样:
for循环中存在逻辑错误,用于检查给定数字的素数。
我建议你将素性测试分成不同的函数,这真的可以帮助你进行调试。我已在下面实施了原始素数测试供您参考:
public class PrimeNumber {
public static void main(String[] args) {
....
for (int k = num1; k <= num2; k++) {
if (isPrime(k)) {
System.out.println(k);
}
}
}
private static boolean isPrime(int k) {
if (k < 2) {
return false;
} else {
for (int i = 2; i < k; i++) {
if (k % i == 0) {
return false;
}
}
}
return true;
}
}
<强>更新强>
如果你坚持要在main方法中包含所有内容(这绝对不是一个好习惯!),修改应该非常直接:
public class PrimeNumber {
public static void main(String[] args) {
....
for (int k = num1; k <= num2; k++) {
boolean isPrime = true;
if (k < 2) {
isPrime = false;
} else {
for (int i = 2; i < k; i++) {
if (k % i == 0) {
isPrime = false;
}
}
}
if (isPrime) {
System.out.println(k);
}
}
}
}