这组代码由于无限递归而产生堆栈溢出错误(至少,我认为是这样)。我已经盯着这段代码很长时间了,无法弄清楚错误发生在哪里。如果有人可以帮助指出我为什么会收到这样的错误,那就太好了。
public void DrawValues(Graphics g, Graphics2D g2, int x, int y, int a, int b){
if (b>8){
b = 0;
a++;
x = 61;
y+=66;
}
if (a==8 && b==8){
g.drawString(String.valueOf(Solver.Rows[a][b]), x, y);
}
else{
g.drawString(String.valueOf(Solver.Rows[a][b]), x, y);
DrawValues(g,g2, x+66, y, a, b++);
}
}
可能有助于说明Rows是9x9 2D数组,a和b从0开始
答案 0 :(得分:0)
这是因为当您进行DrawValues
方法的递归调用时,您使用的是后递增(b ++)而不是预递增(++ b)。如果使用后增量,则在调用方法后,参数将为增量。因此,在您的情况下,变量b
永远不会被更改。
所以,你应该使用预增量:
...
DrawValues(g,g2, x+66, y, a, ++b);
...