我有一个简短的程序,它创建一个整数数组并删除非素数:
public class Main {
public static void main(String[] args){
int[] nums = new int[100];
for (int i = 0; i < nums.length; ++i){
nums[i] = i + 1;
}
int j = 0;
while(j < nums.length){
System.out.print(nums[j]);
System.out.print(" ");
j++;
}
for (int n = 1; n < nums.length / 10; n++){
for (int p = n; p < nums.length; p += nums[n]){
if(p > n){
nums[p] = 0;
System.out.println("p"+nums[p]);
}
}
}
//this code doesn't execute
System.out.println("x");
}
}
该声明应该简单地打印&#34; x&#34;不执行,也没有我在for循环后放置的任何其他语句。程序没有进入无限循环,所以发生了什么?我觉得这很明显,我只是缺席了。
编辑:这是一个无限循环,我只是没有意识到。
答案 0 :(得分:2)
在p
循环中,在第二次迭代中,p > n
为真,您将nums[p]
设置为0
。从那时起,p
将永远不会增加,因为您的增量器为p += nums[n]
而nums[n]
为0
,因此您的循环永远不会终止。
使用调试器可以最好地解决这类问题。使用调试器是程序员的基本技能。使用调试器,您可以逐步执行语句,检查变量,并准确查看代码的作用。它不是一种先进的技术,从第1天开始就是必不可少的,因此您可以正确地诊断代码中的问题。如果您当前不知道如何使用调试器,请停止正在进行的操作并学会使用调试器,这对您来说非常有价值且省时。几乎可以肯定,IDE中内置了一个。
答案 1 :(得分:-1)
你是否陷入无限循环?在控制台中按cmd + c或ctrl + c并查看其功能。如果程序停止,则表示无限循环。