public class Sample {
/**
* @param args
*/
int array[]= {1,2,3};
//it is used to display the array in format as 3,2,1,2,1,1
public void sampleFunction(int size)
{
while(size >= 0)
{
System.out.println(array[size]);
sampleFunction(size-1);
}
//end while loop
}
//end sample function
// starting main class
public static void main(String[] args) {
//creating object Sample
Sample s = new Sample();
//Calling sample function for display the array elements
s.sampleFunction(2);
}
//end main class
}
//end sample class
最佳答案
Java 是 pass by value only 。您永远不会在 while
循环内更新 size
的值,因此 size
将始终大于 0。
public void sampleFunction(int size) {
while(size >= 0) {
System.out.println(array[size]);
sampleFunction(size-1);
//this fixes your code...
size--;
}
}
<小时/>
更好的是,由于您正在处理递归方法,因此只需删除其中的 while
即可:
public void sampleFunction(int size) {
if (size <= 0) return;
System.out.println(array[size]);
sampleFunction(size-1);
}
<小时/>
使用while
循环的问题是size
的值永远不会改变。该方法的执行方式如下:
public void sampleFunction(int size) {
//removed unnecessary code that doesn't generate problems
while(size >= 0) {
sampleFunction(size-1);
}
}
public void main(String[] args) {
sampleFunction(0); //it will be infinite like this...
}
现在,当您调用 sampleFunction(0)
时,将会发生以下情况:
sampleFunction(0)
被调用。while
循环将检查size
(其值为 0)是否大于或等于 0。- 由于它等于 0,因此将调用
sampleFunction(-1)
。
3.1.sampleFunction(-1)
被调用。
3.2.while
循环将检查size
(其值为 -1)是否大于或等于 0。
3.3.由于不满足条件,因此不执行任何操作。
3.4.完成sampleFunction(-1)
执行。 - 返回到
while
检查。size
值从未改变。返回到 2(从而得到无限循环)。
定义递归方法时的提示:
- 始终在方法的顶部定义基本情况(如果不能在顶部,请尽快在方法中定义它)。
- 完成设计后,用纸和铅笔(或钢笔)对其进行测试,并尝试在那里执行它(而不是在电脑中执行)。这将帮助您检查是否遗漏了某些内容。一旦您获得更多经验,您就可以更加信任设计并运行它(并希望它不会变得无限:P)。
关于java - while 循环创建无限循环,尽管条件在 java 中变为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23087889/