2016-01-06 5 views
-1

Этот набор кода создает ошибку переполнения стека из-за бесконечной рекурсии (по крайней мере, я думаю, это так). Я долго смотрел на этот код и не могу понять, где происходит ошибка. Если кто-нибудь может помочь указать, почему я получаю такую ​​ошибку, это было бы здорово.Ошибка переполнения стека внутри кода

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++); 
     } 
    } 

Это, вероятно, поможет заявить, что Ряды является 9x9 2D массив, а и б старт при 0

+1

не меняют 'b' где-нибудь в вашем коде, и вы должны' b' быть равным '8' для кода завершения. –

ответ

0

Это потому, что вы используете пост-приращение (б ++) вместо Преинкремент (+ + b) при создании рекурсивного вызова метода DrawValues. Если вы используете post-increment, аргумент будет приращением после вызова метода. Следовательно, в вашем случае переменная b никогда не будет изменена.

Таким образом, вы должны использовать Преинкремент:

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

Большое спасибо, что сработало! – AntonioK

+0

@AntonioK приветствуются –

Смежные вопросы