Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。
                            
                        
                    
                
            
                    
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        6年前关闭。
                    
                
        

您将创建两个类,一个用于框,一个用于三角形。每个图形(框和三角形)将具有一个偏移量,以告诉它们与屏幕边缘的缩进距离。每个图形都有一个尺寸,尽管对于一个盒子和一个三角形,尺寸是不同的。
基类Figure将具有所有图具有的所有属性的实例变量,并将具有所有图具有的操作方法。例如,每个图形都有给定的偏移量,并且每个图形都应该能够绘制自己。但是,由于我们不知道如何绘制形状未知的图形,因此将drawHere()声明为抽象方法,将Figure声明为抽象类。然后,Box和Triangle类将是Figure的派生类,它们将提供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("*");
   }
}


箱类:

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循环的变量,没有任何办法可以解决它。
谢谢您的帮助!

最佳答案

您的三角方法是:

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


这样做是只打印1星,因为您正在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("* ");


这是其后续输出:

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

10-04 13:05