2015-10-13 4 views
0

, поэтому мне нужно использовать метод для печати содержимого моего прямоугольника и объектов окружности. Я хочу, чтобы они отформатированы что-то вроде этогоИспользуйте для каждого цикла для печати объектов

GeometricObject [color=red, filled=false, dateOfCreation=Wed Feb 11 12:21:51 EST 
2015] 
Circle [ radius= 4.0 Area=50.27 Perimeter=25.13 ] 

Я был дан метод подписи, так что я должен использовать его, я попробовал два различных способа проверить, является ли объект либо прямоугольник или круг, а затем принять правильное действие, но я не могу заставить их печатать что-либо (я считаю, что я могу что-то упустить из своего общедоступного класса hw2redo, в частности, моего метода recreateObject). Логика, к которой я стремилась, состоит в том, что если объект равен кругу (в моем методе recreateObject у меня есть две сигнатуры возврата или круга или прямоугольника), то он будет использовать метод printCircle в классе Circle, но не выводить. Мой второй логический путь состоял в том, что в списке объектов содержалось слово «Прямоугольник» в любом месте, конечно, это означало бы, что это объект прямоугольника и будет обращаться к методу printRectangle в классе Rectangle, но опять-таки ничего. Тем не менее, отметим, что если я просто использую ((Circle) o).printCircle(); , например, он будет вызывать метод printCircle для всех моих объектов круга и выдавать исключение, когда он достигнет моего первого объекта прямоугольника (я думаю, что я близок!).

private static void showObjects(ArrayList<GeometricObject> list) { 

     for(GeometricObject o : list) { 

      if ((o.equals("Circle"))) 
      ((Circle) o).printCircle(); 
      if (o.equals(list.contains("Rectangle"))) 
      ((Rectangle) o).printRectangle(); 
     } 
    } 

Вот мой код, если вы заинтересованы.

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 
import java.util.Objects; 
import java.util.Scanner; 


public class hw2redo 
{ 
    public static void main(String[] args) throws FileNotFoundException { 

      GeometricObject g = null; 
      File diskFile = new File("file.txt"); 
      Scanner diskScanner = new Scanner(diskFile); 
      ArrayList<GeometricObject> list = new ArrayList<GeometricObject>(); 
      while(diskScanner.hasNext()){ 
       String geolist = diskScanner.nextLine(); 
       g = recreateObject(geolist); 

       list.add(g); 

      } 
      diskScanner.close(); 
     /* while (diskScanner.hasNext()) { 
       String list = diskScanner.nextLine(); 
       g = recreateObject(list); 
      } 
      diskScanner.close();*/ 
      showObjects(list); 
     } 





    private static GeometricObject recreateObject(String data) { 

      String[] list = data.split(","); 
      String geoObject = list[0]; 

      if (geoObject.equals("Circle")) { 
      String color = list[1]; 
      boolean filled = Boolean.valueOf(list[2]); 
      double radius = Double.valueOf(list[3]); 
      return new Circle(radius, color, filled); 
      } 

      if (geoObject.equals("Rectangle")) { 
      String color = list[1]; 
      boolean filled = Boolean.valueOf(list[2]); 
      double height = Double.valueOf(list[3]); 
      double width = Double.valueOf(list[4]); 
      return new Rectangle(width, height, color, filled); 
      } 
     return null; 


     } 

    private static void showObjects(ArrayList<GeometricObject> list) { 

     for(GeometricObject o : list) { 

      if ((o.equals("Circle"))) 
      ((Circle) o).printCircle(); 
      if (o.equals(list.contains("Rectangle"))) 
      ((Rectangle) o).printRectangle(); 
     } 
    } 
} 

abstract class GeometricObject { 
     private String color = "white"; 
     private boolean filled; 
     private java.util.Date dateCreated; 
     private String data; 

     /** Construct a default geometric object */ 
     public GeometricObject() { 
      super(); 
    dateCreated = new java.util.Date(); 
    //this.data = data; 
     } 


    /** Construct a geometric object with the specified color 
    * and filled value */ 
    public GeometricObject(String color, boolean filled) { 
    super(); 
    dateCreated = new java.util.Date(); 
    this.color = color; 
    this.filled = filled; 

    } 

    /** Return color */ 
    public String getColor() { 
    return color; 
    } 

    /** Set a new color */ 
    public void setColor(String color) { 
    this.color = color; 
    } 

    /** Return filled. Since filled is boolean, 
    its getter method is named isFilled */ 
    public boolean isFilled() { 
    return filled; 
    } 

    /** Set a new filled */ 
    public void setFilled(boolean filled) { 
    this.filled = filled; 
    } 

    /** Get dateCreated */ 
    public java.util.Date getDateCreated() { 
    return dateCreated; 
    } 

    /** Return a string representation of this object */ 
    public String toString() { 
    return "GeometricObject [color=" + color +", filled="+ filled + ", dateOfCreation=" + dateCreated + 
      "]\n"; 

    } 
    } 
class Circle extends GeometricObject 
{ 
private double radius; 

public Circle() { 
    super(); 
    radius = 1; 

} 


public Circle(double radius, 
String color, boolean filled) { 
    super(color, filled); 
this.radius = radius; 
setColor(color); 
setFilled(filled); 
} 

/** Return radius */ 
public double getRadius() { 
return radius; 
} 

/** Set a new radius */ 
public void setRadius(double radius) { 
this.radius = radius; 
} 

/** Return area */ 
public double getArea() { 
return radius * radius * Math.PI; 
} 

/** Return diameter */ 
public double getDiameter() { 
return 2 * radius; 
} 

/** Return perimeter */ 
public double getPerimeter() { 
return 2 * radius * Math.PI; 
} 

/** Print the circle info */ 
public void printCircle() { 
System.out.println("The circle is created " + getDateCreated() + 
" and the radius is " + radius); 
} 
} 


class Rectangle extends GeometricObject { 
private double width; 
private double height; 

public Rectangle() { 
    super(); 
} 



public Rectangle(
double width, double height, String color, boolean filled) { 
    super(color, filled); 
this.width = width; 
this.height = height; 
setColor(color); 
setFilled(filled); 
} 

/** Return width */ 
public double getWidth() { 
return width; 
} 

/** Set a new width */ 
public void setWidth(double width) { 
this.width = width; 
} 

/** Return height */ 
public double getHeight() { 
return height; 
} 

/** Set a new height */ 
public void setHeight(double height) { 
this.height = height; 
} 

/** Return area */ 
public double getArea() { 
return width * height; 
} 

/** Return perimeter */ 
public double getPerimeter() { 
return 2 * (width + height); 
} 
public void printRectangle() { 
System.out.println("The circle is created " + getDateCreated() + 
" and the radius is " + width); 
} 
} 

Мой file.txt (объекты я пытаюсь воссоздать) conatins

Circle,green,false,4.0 
Circle,blue,false,2.0 
Circle,blue,true,7.0 
Rectangle,orange,true,10.0,6.0 
Rectangle,green,false,5.0,11.0 
Rectangle,red,true,14.0,12.0 

Любая помощь или советы в правильном направлении было бы весьма признателен. Благодаря тонну!

+0

'o.equals (list.contains (« Прямоугольник »))' неверно (как и ваш другой вызов 'equals'); вы попытаетесь увидеть, являются ли два абсолютно несвязанных объекта эквивалентными, что не получится. – Makoto

+0

Как они полностью не связаны? Я пытаюсь посмотреть, является ли объект Кругом? @Makoto –

+0

Ну ... строка '' Circle'' не является экземпляром 'GeometricObject' ... и ни одна из них не является' boolean'. – Makoto

ответ

1

Я не вижу .equals() метод, переопределенный в вашем коде, чтобы вы могли использовать if ((o.equals("Circle"))) в showObjects() метод.

Вы должны либо ручка .equals() метод надлежащим образом в вашем коде или вы можете использовать

if (o instanceof Circle) 

вместо if ((o.equals("Circle"))) в showObjects() методе. Возможно, вам придется сделать то же самое для других объектов (например, Rectangle).

+0

Большое вам спасибо! Именно то, что я пытался сделать. Если я могу спросить, является ли это обычным или предпочтительным методом или скорее переопределит метод .equals(). Снова я ценю помощь! –

+0

@ RiFF RAFF. Чтобы выполнить то, что вы пытаетесь сделать (просто определите тип), вам лучше использовать этот подход, чем переопределить метод equals. 'equals()' служит для большей цели. См. Соответствующую ссылку ниже. http://www.javapractices.com/topic/TopicAction.do?Id=17 – Dinesh

+0

Ahh, мне нужно будет прочитать об этом. Еще раз спасибо! –

0

Мне нужно использовать способ для печати содержимого s моих объектов прямоугольника и круга.

Circle [ radius= 4.0 Area=50.27 Perimeter=25.13 ] 

Любая помощь или советы в правильном направлении было бы весьма признателен.

Подсветка для Circle Класс. Используйте следующий метод для печати круга:

public void printCircle() { 
     System.out.println("Circle [" + 
       "radius=" + radius + 
       " Area=" + getArea() + 
       " Perimeter=" + getPerimeter() + 
       ' ]'); 
    } 

Я не проверял вашу логику, так как вам нужно ее самостоятельно изучить :).

Смежные вопросы