【发布时间】:2014-11-15 21:28:26
【问题描述】:
这是我目前正在处理的一个程序的小 sn-p,该程序正在发生无限循环。当它遇到这个循环时,我已经将所有变量设置为它们在程序中的值。这个循环的目标是让它要么中断(当然它不会使用这些值)或者遍历整个循环然后继续,我相信它应该基于 for 循环中设置的条件,而是变成了一个无限循环。我迷路了,想知道是否有人可以帮助我。为什么这是一个无限循环,我该如何解决?谢谢。
第一个代码 sn-p 是显示无限循环的最小代码。我放 System.out.println("Infinite"); 的地方是发生无限循环的地方。它永远不会到达 for 循环中的 if 语句。我试过调试无济于事。
int e = 1;
int f = 0;
int q = 2;
int posInt = 10;
int[] Prime = new int[posInt];
Prime[0] = 2;
Prime[1] = 3;
Prime[2] = 5;
int stay = 0;
while(stay == 0){
while(e <= posInt){
if((q + 1) == Prime[f]){
stay++;
System.out.println("BREAKING");
break;
}
e++;
f++;
}
q++;
}
这是到目前为止的整个程序,以防万一。目标是通过使用埃拉托色尼筛法来测试用户输入的数字是否为质数。我意识到程序中可能存在其他错误并且可能不正确,但我仍在努力。目前我无法进步,因为我陷入了这个无限循环。
int posInt;
Scanner reader = new Scanner(System.in);
System.out.print("Please enter in any positive integer greater than one to see if it is a prime number: ");
posInt = reader.nextInt();
System.out.println();
int n = posInt;
int q = 2;
int a = 3;
int b = 1;
int[] list = new int[n];
list[0] = 2;
while(a <= n){
list[b] = a;
a++;
b++;
}
int c = 2;
int d = 0;
int P = 0;
int nP = 0;
int[] notPrime = new int[n];
int[] Prime = new int[n];
while(c <= n){
if(list[d] == q){
Prime[P] = list[d];
P++;
}
else if(list[d] % q == 0){
notPrime[nP] = list[d];
nP++;
}
else{
Prime[P] = list[d];
P++;
}
c++;
d++;
System.out.println("Primes numbers: ");
int y = 1;
int z = 0;
while(y <= P){
System.out.println(Prime[z]);
y++;
z++;
}
System.out.println("Numbers that are not prime: ");
y = 1;
z = 0;
while(y <= nP){
System.out.println(notPrime[z]);
y++;
z++;
}
int stay = 0;
int e = 1;
int f = 0;
while(stay == 0){
while(e <= posInt){
if(!((q + 1) == notPrime[f])){
stay++;
break;
}
e++;
f++;
}
q++;
}
}
int g = 2;
int h = 0;
boolean prime = false;
while(g <= n){
if(posInt == Prime[h]){
prime = true;
break;
}
g++;
h++;
}
if(prime = true){
System.out.println("The number " + n + " is prime.");
}
else if(prime = false){
System.out.println("The number " + n + " is not prime.");
}
reader.close();
【问题讨论】:
-
你试过调试程序看看它在哪里循环吗?
-
请贴出显示无限循环的minimal代码sn-p
-
请告诉我们您的程序在哪里循环。您可以通过使用调试器并单步执行代码或在代码中添加跟踪语句(例如使用 System.out.println)来找出循环,以便查看循环发生的位置。
-
第一个代码 sn-p 是显示无限循环的最小代码。我放 System.out.println("Infinite"); 的地方是发生无限循环的地方。它永远不会到达 for 循环中的 if 语句。我试过调试无济于事。
标签: java infinite-loop sieve-of-eratosthenes