递归Sierpinsky三角形 - *错误
问题描述:
我得到我的代码运行到目前为止,除了递归部分。我得到一个*错误,我真的不明白为什么,或者如何解决它。当我通过代码工作时,它似乎在逻辑上很好。递归Sierpinsky三角形 - *错误
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);
}
}
答
您需要添加一些条件才能从paintSierpinskiTriangle
方法返回。
没有任何条件,即使s = 0,它也会自动无限调用,这是导致错误的原因。
你认为''paintSierpinkskiTriangle()'每次调用'JPanel'' repaint's时会调用多少次? – CraigR8806
对不起,我不明白。 –
我认为你在'paintSierpinskiTriangle'中缺少一些检查,你将不会**停止递归。 – luk2302