Java 什么';当没有无限递归方法时,是什么导致堆栈溢出错误?

Java 什么';当没有无限递归方法时,是什么导致堆栈溢出错误?,java,for-loop,arraylist,stack-overflow,infinite-loop,Java,For Loop,Arraylist,Stack Overflow,Infinite Loop,我正在用Java编写一个国际象棋程序。我有一个布尔方法,它以两个ints的形式获取用户希望将车移动到的位置,并基于车的当前行和列,使用for循环确定车是否可以移动到那里。以下是其中一个循环的示例 int nc=col-1; 而(nc>=0){ 添加(新整数[]{row,nc}); 如果(本地[行][nc]!=null) 打破 nc--; } moves是我在程序前面声明的一个ArrayList。它存储所有有效移动的列表,这是我用来实例化它的for循环之一 问题是,每次我运行这段代码时,包含ad

我正在用Java编写一个国际象棋程序。我有一个布尔方法,它以两个
int
s的形式获取用户希望将车移动到的位置,并基于车的当前行和列,使用for循环确定车是否可以移动到那里。以下是其中一个循环的示例

int nc=col-1;
而(nc>=0){
添加(新整数[]{row,nc});
如果(本地[行][nc]!=null)
打破
nc--;
}
moves
是我在程序前面声明的一个ArrayList。它存储所有有效移动的列表,这是我用来实例化它的for循环之一

问题是,每次我运行这段代码时,包含add方法的行都会因为是无限循环而突出显示,并且代码不会运行。我做错了什么

编辑

这正是软件显示给我的错误消息:

另外,我将发布该方法的全文。我不确定这些是否与我的问题有关,但这可能会有帮助

公共布尔值isValidMove(int r,int c){
工件[][]局部变量=Chess.getBoard();
if(r<0 | | c<0 | | r>7 | | | c>7 | | |(局部变量[r][c]!=null和局部变量[r][c].getWhite()=isWhite))
返回false;
ArrayList移动=新建ArrayList();
int nc=列-1;
而(nc>=0){
添加(新整数[]{row,nc});
如果(本地[行][nc]!=null)
打破
nc--;
}
nc=col+1;
而(nc<8){
添加(新整数[]{row,nc});
如果(本地[行][nc]!=null)
打破
nc++;
}
int nr=第1行;
而(nr>=0){
添加(新整数[]{nr,col});
if(局部变量[nr][col]!=null)
打破
nr--;
}
nr=行+1;
而(nr<8){
添加(新整数[]{nr,col});
if(局部变量[nr][col]!=null)
打破
nr++;
}
对于(整数[]整数:移动){
如果(整数[0]==r&&整数[1]==c)
返回true;
}
返回false;
}

我发现了程序的错误并设法修复了它。所讨论的循环实际上不会永远迭代,但是程序中的某个方法称为另一个方法,而另一个方法又称为原始方法。因此,在没有任何一种无限递归方法的情况下,堆栈溢出是错误的

循环实际上是无限运行的吗?您使用的是IDE吗?IntelliJ Idea通常在您编写代码并提供解决方案时检测无限循环之类的情况。当您将鼠标悬停在下划线上时,IDE会告诉您什么?我建议您从问题中删除不相关的代码和信息,并且只包含您认为存在无限循环的代码片段。为了让问题更清楚。您是否尝试在调试器中运行代码?@ap请在问题中发布运行时错误。