2

我有一个可以定义为这样的程序

reset() {
   //sets all variables to initial values
   //clears all arrays
   method1();
}

method1 (){
    //doSomeStuff;
    method2();
}

method2(){
    //doStuff
    method3();
}

method3(){
    //doStuff
    if (jobDone) reset(); //here the cycle closes
    else method2();
}

所有这些方法的计算量都很大。根据输入数据和结果,程序可能只执行几个周期并引发“堆栈溢出”错误。

我已经更改了 VM 标志 -Xss ( -Xss8M) 但这并不能真正解决问题。

有没有办法让它几乎无限地工作?

4

1 回答 1

2

Luiggi Mendoza 之前提到的解决方案:如何避免堆栈溢出错误

当你调用reset时,它调用method1,它调用method2,它调用method3,它调用reset或method2都导致递归无限循环。

你可能想要:

if (jobDone) return; // here the cycle realy closes

代替

if (jobDone) reset(); //here the do _not_ close

如果你真的想要你的代码无限循环,这不会因为reset或methodi的方法调用而导致SO:

// assuming jobDone is actually a method, you might need this variable
boolean startReset = true;
while (true) {
        if (startReset) {
            //sets all variables to initial values
            //clears all arrays

            //doSomeStuff from method1;
        }
        //doStuff from method2

        //doStuff
        startReset = jobDone;
    }
}
于 2013-03-31T22:58:06.947 回答