2017-06-05 11 views
0

再帰的な部分を除いて、私は今まで自分のコードを実行している。私はStackOverflowのエラーを取得し、私は本当になぜ、またはそれを修正する方法を取得していません。私がコードを処理すると、論理的にはうまくいくようです。再帰的Sierpinskyトライアングル - StackOverflowエラー

public class SierpinskiTriangle { 
public static int SIZE = 1000; 

JFrame frame; 
JPanel panel; 

@SuppressWarnings("serial") 
public void display() { 
    frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    panel = new JPanel() { 
     @Override 
     public void paint(Graphics g) { 
      super.paint(g); 
      paintSierpinskiTriangle(20, 20, 360, (Graphics2D)g); 
     } 
    }; 
    panel.addComponentListener(new ComponentAdapter() { 
     @Override 
     public void componentResized(ComponentEvent e) { 
      panel.repaint(); 
     } 
    }); 
    frame.setLayout(new BorderLayout()); 
    frame.add(panel, BorderLayout.CENTER); 
    frame.pack(); 
    frame.setSize(SIZE, SIZE); 
    frame.setVisible(true); 
} 

public static void main(String[] args) { 
    SierpinskiTriangle triangle = new SierpinskiTriangle(); 
    triangle.display(); 
} 

public static void paintSierpinskiTriangle(int x, int y, int s, Graphics2D g) { 
    g.drawLine(x, y, x+s, y); 
    g.drawLine(x, y, x, y+s); 
    g.drawLine(x+s, y, x, y+s); 

    paintSierpinskiTriangle(x, y, s/2, g); 
    paintSierpinskiTriangle(x+s/2, y, s/2, g); 
    paintSierpinskiTriangle(x, y+s/2, s/2, g); 

} 
} 
+0

'paintSierpinkskiTriangle()'が 'JPanel'の' repaint'sのたびに何回呼び出されると思いますか? – CraigR8806

+0

申し訳ありませんが、私はそれを取得しません。 –

+1

私は 'paintSierpinskiTriangle'にいくつかの小切手がないと思っていますが、再帰を止めることはありません**。 – luk2302

答えて

0

paintSierpinskiTriangleメソッドから返される条件を追加する必要があります。

条件なしでは、s = 0であっても、エラーの原因となるものであっても無限に呼び出されます。