gpt4 book ai didi

Java - 为什么这是一个无限循环以及如何修复它?

转载 作者:行者123 更新时间:2023-12-02 05:15:58 26 4
gpt4 key购买 nike

这是我当前正在处理的程序的一小段,其中发生了无限循环。我已将所有变量设置为程序遇到此循环时它们所在的值。这个循环的目标是让它要么中断(当然不会使用这些值),要么遍历整个循环然后继续,我相信它应该基于 for 循环中设置的条件,但它变成了无限循环。我迷失了,想知道是否有人可以帮助我。为什么这是一个无限循环以及如何修复它?谢谢。

第一个代码片段是显示无限循环的最少代码。我放置 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();

最佳答案

无限循环不在第一个片段中,而是在周围的 while 中 - 如果 break 从未发生,stay 也将发生始终为 0,除非其他操作之一引发异常,否则您将永远卡在那里......

    int stay = 0;
while(stay == 0){
int e;
int f = 0;
for(e = 1; e <= posInt; e++){
if((q + 1) == Prime[f]){
stay++;
break;
}
f++;
System.out.println("Infinite");
}
q++;
}

关于Java - 为什么这是一个无限循环以及如何修复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26950920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com