Java:已创建随机大小的数组,负责打印每个项目(不同形状),最后一个元素未完全打印

Java: Created array of random size, tasked to print each item (different shapes), last element doesn't fully print

这是我的driver

public class ShapeDriver
{
   public static void main(String[] args)
   {
   //       
   //       for (int i= 0; i < arr.length;i++)
   //       {
   //       arr[i]= ranShape();
   //       }

  Rectangle rect = new Rectangle(10, 10);
  Circle circ = new Circle(6.7);
  rightTriangle riTri = new rightTriangle(9, 12.3);
  Square sqa = new Square(2);
 //random array 20-50  
  int roll= 0;
  int roll2= 0;
  int o= 0;
  int p= 0;
  int rectCount= 1;
  int squCount= 1;
  int circCount= 1;
  int triCount= 1;

  roll= (int)(Math.random()*50) + 20;  
  System.out.println(roll); 
  Shape[] arr = new Shape[roll];
  for (int l= 0; l < roll; l++)
  {          
     roll2= (int)(Math.random()*4) + 1;
     o= (int)(Math.random()*100) + 10;   
     p= (int)(Math.random()*100) + 1;        
     if (roll2 == 1)
     {
        arr[l]= new Rectangle(o, p);
       //  arr[l].getArea();
       //  arr[l].getPerimeter();
        arr[l].toString();

        if (l < roll)
        {             
           System.out.println("Rectangle " + rectCount + " stats are: ");
        }
        rectCount++;
     }
     if (roll2 == 2)
     {
        arr[l]= new Square(o);
     //             arr[l].getArea();
     //             arr[l].getPerimeter();
        arr[l].toString();

        if (l < roll)
        {            
           System.out.println("Square " + squCount + " stats are: ");
        }
        squCount++;
     }
     if (roll2 == 3)
     {
        arr[l]= new rightTriangle(o, p);
     //             arr[l].getArea();
     //             arr[l].getPerimeter();
        arr[l].toString();

        if (l < roll)
        {
           System.out.println("Right triangle " + triCount + " stats are: ");
        }
        triCount++;
     }
     if (roll2 == 4)
     {
        arr[l]= new Circle(p);
        arr[l].toString();
     //             arr[l].getArea();
     //             arr[l].getPerimeter();
        if (l < roll)
        {            
           System.out.println("Circle " + circCount + " stats are: ");
        }
        circCount++;
     }      
  }   
   }

Class - 这是我的抽象 class,我还有一个直角三角形、圆形、正方形和矩形 class 扩展形状。

 Shape (abstract)
        public abstract class Shape
{            
   public abstract double getArea();

   public abstract double getPerimeter();

     //NOTE: getClass().getName() will return the class name that the object was instantiated as.
    public String toString()
   {
      return (getClass().getName() + ",\t Area: " + getArea() + ",\t 
Perimeter: " + getPerimeter());
    }
}

所以我的输出很好 - 除了最后一个元素,例如,我有

[很多形状和area/perimeters]...

...

直角三角形 14 的统计数据是:

class圆的面积为:30790.74959783356

class圆周长为:622.0353454107791

第 18 圈的统计数据是:

这就是它停止的地方。没有错误消息,只是最后一个元素的一部分,没有实际打印周长或面积(使用 getArea/getPerimeter 或 toString 访问)

你必须颠倒顺序

  for (int l= 0; l < roll; l++)
  {          
     roll2= (int)(Math.random()*4) + 1;
     o= (int)(Math.random()*100) + 10;   
     p= (int)(Math.random()*100) + 1;        
     if (roll2 == 1)
     {
        if (l < roll)
        {             
           arr[l]= new Rectangle(o, p);
           System.out.println("Rectangle " + rectCount + " stats are: ");
           arr[l].toString();
           rectCount++;
        }
     }
     if (roll2 == 2)
     {    
        if (l < roll)
        {            
           arr[l]= new Square(o);
           System.out.println("Square " + squCount + " stats are: ");
           arr[l].toString();
           squCount++;
        }
     }
     if (roll2 == 3)
     {    
        if (l < roll)
        {
           arr[l]= new rightTriangle(o, p);
           System.out.println("Right triangle " + triCount + " stats are: ");
           arr[l].toString();
           triCount++;
        }
     }
     if (roll2 == 4)
     {
        if (l < roll)
        {            
           arr[l]= new Circle(p);
           System.out.println("Circle " + circCount + " stats are: ");
           arr[l].toString();
           circCount++;
        }
     }      
  }