代码中的堆栈溢出错误

时间:2016-01-06 01:33:56

标签: recursion

这组代码由于无限递归而产生堆栈溢出错误(至少,我认为是这样)。我已经盯着这段代码很长时间了,无法弄清楚错误发生在哪里。如果有人可以帮助指出我为什么会收到这样的错误,那就太好了。

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开始

1 个答案:

答案 0 :(得分:0)

这是因为当您进行DrawValues方法的递归调用时,您使用的是后递增(b ++)而不是预递增(++ b)。如果使用后增量,则在调用方法后,参数将为增量。因此,在您的情况下,变量b永远不会被更改。

所以,你应该使用预增量:

...
DrawValues(g,g2, x+66, y, a, ++b);
...