需要创建5个形状

时间:2013-11-13 06:20:29

标签: java shapes figures

您将创建两个类,一个用于框,一个用于三角形。每个图形,框和三角形都有一个偏移量,表示它们从屏幕边缘缩进的距离。每个图形也都有一个尺寸,尽管尺寸将根据方框和三角形的不同而不同。 基类图将包含所有数据共有的任何属性的实例变量,并且将具有所有数字所具有的操作的方法。例如,每个图形都有一个给定的偏移量,每个图形都应该能够绘制自己。但是,因为我们不知道如何绘制未知形状的图形,所以将drawHere()声明为抽象方法,将Figure声明为抽象类。 Box和Triangle类将是图的派生类,它们将提供drawHere()的实现。这是图,框和三角形的UML图。

方法drawHere将简单地缩进屏幕上的多个空格,等于偏移量,然后在屏幕上写下星号。这只是为了让您可以测试一些东西。您不打算在任何应用程序中使用此版本的drawHere。在为框和三角形定义类时,您将覆盖drawHere的定义。

方法drawAt有一个int类型的参数。方法drawAt插入一些等于此参数的空行,然后通过调用drawHere绘制图形。当您覆盖drawHere时,drawAt也将生成正确的数字。

我需要一张打印出来的圣诞树:

           *
          * *
         *   *
        *     *
       *       *
      *         *
     *           *
    *             *
   *               *
  *                 *
 *********************
         -----
         |   |
         |   |
         -----

图类:

public abstract class Figure 
{
private int offset;

public Figure()
{
   offset = 0;
}

public Figure(int theOffset)
{
   offset = theOffset;
}

public void setOffset(int newOffset)
{
   offset = newOffset;
}

public int getOffset()
{
   return offset;
}

public void drawAt(int lineNumber)
{
   for (int count = 0; count < lineNumber; count++)
      System.out.println();
   drawHere();
}

public abstract void drawHere();
}

三角类:

public class Triangle extends Figure
{
   private int base;

   public Triangle()
   {
      base = 0;
   }

   public Triangle(int offset, int base)
   {
      offset = 0;
      this.base = base;
   }

   public void reset(int newOffset, int newBase)
   {
      newOffset = 0;
      newBase = 0;
   }

   public void drawHere()
   {
      for (int count = 0; count < base; count++)
          System.out.print("");
     System.out.println("*");
   }
}

Box class:

public class Box extends Figure
{
private int height;
private int width;

public Box()
{
  height = 0;
  width = 0;
}

public Box(int offset, int height, int width)
{
  super(offset);
  this.height = height;
  this.width = width;
}

public void reset(int newOffset, int newHeight, int newWidth)
{
  newOffset = 0;
  newHeight = 0;
  newWidth = 0;
}

public void drawHere()
{
  for (int count = 0; count < width; count++)
     System.out.print("");
  System.out.println('-');
}
}

GraphicsTest类:

public class GraphicsTest 
{
   public static void main(String[] args)
   {
       Triangle top = new Triangle (5, 21);
       Box base = new Box(13, 4, 5);
       top.drawAt(1);
       base.drawAt(0);
   }
}

它返回的代码是:

*
-

我的问题是我需要在代码中修复什么才能打印出圣诞树。我试过改变drawHere方法中for循环的变量,没有什么能解决它。 谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

以下是您使用代码获得结果的原因。

查看方法 drawHere

public void drawHere()
{
  for (int count = 0; count < base; count++)
      System.out.print("");
 System.out.println("*");
}

在for-loop中你什么都没做。在此方法中,字符*仅打印一次。这就是你只能在控制台*上看到的原因。

出于同样的原因,在绘制Box时只有一个' - '。

答案 1 :(得分:0)

您的三角形方法是:

   public void drawHere()
   {
      for (int count = 0; count < base; count++)
          System.out.print("");
     System.out.println("*");
   }

这样做只打印出一颗星,因为你在for循环中打印一个空字符串。

以下是我通过实验为简单三角形绘制的代码。

    int size = 11; 
    for(int i = 0; i < size-1; i++) {
        for(int j = 0; j < size - (i+1); j++)
            System.out.print(" ");
        System.out.print("*");
        for(int k = 0; k < 2*i - 1; k++)
            System.out.print(" ");
        if(i > 0)
            System.out.print("*\n");
        else
            System.out.println();
    }
    for(int i = 0; i < size; i++)
        System.out.print("* ");

以下是其后续输出:

          *
         * *
        *   *
       *     *
      *       *
     *         *
    *           *
   *             *
  *               *
 *                 *
* * * * * * * * * * *