2014-09-29 29 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