2014-09-29 50 views
0

我想寫一個繪製主要正方形的小程序,然後使用遞歸方法在主要正方形的角上畫出更小的正方形。我真的很困惑如何去做這件事。我已經繪製了與其他角落的廣場,但我需要遞歸做這個過程,那就是我迷路了。我需要設置最小邊長,以便遞歸方法知道何時停止。這是我的代碼。使用java遞歸方法繪製正方形

import javax.swing.JApplet; 

import java.awt.*; 
public class LabC extends JApplet 
{ 
    public void paint(Graphics g) 
    { 
    g.drawRect(50, 100, 100, 100); 
    g.drawRect(25, 75, 50, 50); 
    g.drawRect(125, 75, 50, 50); 
    g.drawRect(125, 175, 50, 50); 
    g.drawRect(25, 175, 50, 50); 


} 
} 
+0

我會寫另一功能啓動,可能調用它'paintSquare()',它需要幾個其他參數來定義每種方塊可能會改變的方面。 – 2014-09-29 04:11:23

+1

@ Code-Apprentice這是一個很好的開始。爲了補充一點,我還要定義每個方塊之間的關係。其中一個x的維數爲25,另一個的維數爲125.這裏有一些模式,您應該注意並利用遞歸方法。 – DreadHeadedDeveloper 2014-09-29 04:13:37

回答

1

我覺得這是多了還是少了什麼你找

public static class LabC extends JLabel { 

    public void paintRecursiveWraper(Graphics g, int minW, int minH, int x, int y, int w, int h) { 
     g.drawRect(x, y, w, h); 
     paintRecusive(g, minW, minH, x, y, w, h); 
    } 

    public void paintRecusive(Graphics g, int minW, int minH, int x, int y, int w, int h) { 
     if (h <= minH || w <= minW) { 
      return; 
     } 

     int newW, newH; 
     int newX, newY; 
     newW = (int) (w * scaleFactor); 
     newH = (int) (h * scaleFactor); 

     // Bot Left Square 
     newX = x; 
     newY = y; 
     g.drawRect(newX, newY, newW, newH); 
     paintRecusive(g, minW, minH, newX, newY, newW, newH); 
     // Bot Right Square 
     newX = (int) (x + w * (1 - scaleFactor)); 
     newY = y; 
     g.drawRect(newX, newY, newW, newH); 
     paintRecusive(g, minW, minH, newX, newY, newW, newH); 
     // Top Left Square 
     newX = x; 
     newY = (int) (y + h * (1 - scaleFactor)); 
     g.drawRect(newX, newY, newW, newH); 
     paintRecusive(g, minW, minH, newX, newY, newW, newH); 
     // Top Right Square 
     newX = (int) (x + w * (1 - scaleFactor)); 
     newY = (int) (y + h * (1 - scaleFactor)); 
     g.drawRect(newX, newY, newW, newH); 
     paintRecusive(g, minW, minH, newX, newY, newW, newH); 
    } 

    public void paint(Graphics g) { 
     paintRecursiveWraper(g, 10, 10, 0, 0, 1000, 1000); 

    } 
} 

比例因子已經是0和1之間

編輯*

+0

這是接近我想要的。唯一不同的是,我試圖完成的是每個新廣場都需要在主廣場的四個角上繪製。 – user3242607 2014-09-29 04:48:40

+0

@ user3242607聽起來像你應該用不同的參數調用'paintRecursive()'四次。我建議拿出一張紙和一支鉛筆來找出需要傳遞給遞歸調用的新值的公式。 – 2014-09-29 05:02:20

+0

檢查現在是否適合你 – 2014-09-29 05:09:01