2014-10-19 93 views
0

讓我的代碼工作時遇到了一些麻煩。在我的代碼中,嵌套的等腰三角形假設是這樣繪製的:enter image description here
我不確定我的代碼是否可以工作,因爲一旦我運行它,三角形就不會繪製。我給出的這個錯誤線程嵌套右等腰三角形Java

例外 「AWT-EventQueue的 - 0」 java.lang.StackOverflowError的

,我不知道如何解決它。幫幫我?

import java.awt.*; 
import javax.swing.*; 

public class Ornament extends JPanel 
{ 
public void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); // Call JPanel's paintComponent method 
           // to paint the background 
    drawTriangles(g, 100, 80, 64); 
} 


/** 
* Draws an ornament made of triangles in Graphics g with the base midpoint 
* at (x, y) and base half-length r 
*/ 
public void drawTriangles(Graphics g, int x, int y, int r) 
{ 
    g.drawLine(x + r, y, x - r, y); 
    g.drawLine(x + r, y, x, y - r); 
    g.drawLine(x - r, y, x, y - r); 

    if (r == 4) 
    { 
     drawTriangles(g, x-r , y, r); 
     drawTriangles(g, x-r , y, r); 
    } 

    else { 

     drawTriangles(g, 36+r , y, r); 
     r --; 
    } 

} 


public static void main(String[] args) 
{ 
    JFrame w = new JFrame("Triangles"); 
    w.setBounds(300, 300, 200, 120); 
    w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    Ornament panel = new Ornament(); 
    panel.setBackground(Color.WHITE); 
    Container c = w.getContentPane(); 
    c.add(panel); 
    w.setResizable(false); 
    w.setVisible(true); 
} 
} 
+1

您的'drawTriangles'沒有基本大小寫。 – BitNinja 2014-10-19 23:01:51

回答

1

如果調用drawTrianglesr不等於4,它會保持與同r連連自稱。 r--永遠不會到達。

嘗試在else子句中遞歸調用之前放r--

+1

這對於'r = 4'的情況也沒有幫助,它也被破壞了。 – 2014-10-19 23:13:33

0

您正在創建一個無限循環。 這是在第一個系列迭代發生:

drawTriangles(g, 100, 80, 64); 
    // draw lines 
    drawTriangles(g, 136 , 80, 64); 
    // draw lines 
    drawTriangles(g, 172 , 80, 64); 
     // draw lines 
     drawTriangles(g, 208, 80, 64); 
     r--; 
    r --; 
    r--; 

等等。然而,從未到達r--因爲你首先進入下一級遞歸。 如果你換成drawTriangles和r--,至少r會變小,儘管不是很快。我會期待r/2或其他什麼。

1

你不想繼續,一旦你達到4(你的基本情況),所以你可以寫的if語句

if (r != 4) { 
    drawTriangles(g, 36 + r , y, r - 1); 
} 

這不會產生圖形輸出如圖所示的原始描述,但將阻止0123'