gpt4 book ai didi

java - 如何修复此堆栈溢出错误?

转载 作者:行者123 更新时间:2023-12-04 19:32:09 26 4
gpt4 key购买 nike

所以我有我认为非常好的 java 数独求解器代码,但我需要一些关于这种方法的帮助。当我将它嵌入到 main 方法中时,它给了我一个堆栈溢出。问题是我的方法不知道如何扭转并修复它的错误。我需要一个 boolean 标志(与下面代码中使用的标志不同,实际上最好工作的标志)或其他东西让它知道什么时候应该返回以及什么时候可以再次前进并继续解决游戏。谢谢你提供的所有帮助

public void play(int r, int c){//this method throws the StackOverflowError
if(needAtLoc(r,c).size()==9){
int num=1+generator.nextInt(9);
setCell(r,c,num,this);

if(c<8){
System.out.println(this);///////////////
play(r, c+1);
}
else{
play(r+1, 0);
}
}
else{
if(needAtLoc(r,c).size()==0){//no possible moves THIS IS THE PROBLEM LINE!!!
if(c>0){
play(r, c-1);//play last cell, in column to left
}
else{
if(r==0){
play(r,c);//first square, so must play again (can't go back)
}
else{
play(r-1, 8);/*first cell of row so must go to previous row and
the end column*/
}
}
}

else{//if there are possible moves
int num=needAtLoc(r,c).remove(generator.nextInt(needAtLoc(r,c).size()));
setCell(r,c,num,this);//set the value of the cell
System.out.println(this);//////////////
if(r==8 && c==8){//the end of the cell has been reached so must end recursive call
return;
}
else{
if(c<8){
play(r, c+1);//normal, next cell
}
else{
play(r+1, 0);/*last cell in row so we go to next one
in the first column ("return" button)*/
}
}
}
}
}

最佳答案

我不会为您解决这个问题,而是就如何解决这个问题提出一些建议。 9个小时足够了。

1)你的代码很难阅读。试着把它隔开一点。为您的变量赋予清晰的有意义的名称(这有助于您和其他人阅读您的代码)。您可能犯了一个简单的错误,而干净的代码将使这些错误更容易被发现。尝试将其分解为更小的方法,因为这将使其更具可读性和可维护性。

2)当您进行太多嵌套方法调用时会导致堆栈溢出(通常我相信)并且在递归代码中很常见。因此,请明确您的递归。确保您有一个将终止的基本案例。

很抱歉没有给你“答案”,但因为这听起来像是家庭作业,我认为学习如何自己解决这个问题更有值(value)。希望这看起来很公平。

关于java - 如何修复此堆栈溢出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1919787/

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