所以我想寫一個方法,將返回最大面積的對象的索引。這是我目前的方法矩形不能轉換爲Circle?
private static int findPositionLargestObject(ArrayList <GeometricObject> geoList) {
int maxIndexC = 0;
int maxIndexR = 0;
for (GeometricObject o: geoList) {
for (int i = 1; i < geoList.size(); i++) {
if (o instanceof Rectangle) {
if (((Rectangle) geoList.get(i)).getArea() > ((Rectangle) geoList.get(maxIndexR)).getArea()) {
maxIndexR = i;
}
}
if (o instanceof Circle) {
if (((Circle) geoList.get(i)).getArea() > ((Circle) geoList.get(maxIndexC)).getArea()) {
maxIndexC = i;
}
}
}
}
if (maxIndexC > maxIndexR) {
return maxIndexC;
} else return maxIndexR;
}
但是,當我運行此方法,我收到錯誤消息矩形不能轉換爲圓形。我有兩個不同的if語句的原因是因爲getArea方法對於圓形和矩形對象分別是不同的。任何想法,爲什麼我收到此消息,謝謝!
這裏是我的公共類
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);
findPositionLargestObject(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 instanceof Circle)
{
System.out.println(o);
((Circle) o).printCircle();
System.out.println("");
}
if (o instanceof Rectangle)
{
System.out.println(o);
((Rectangle) o).printRectangle();
System.out.println("");
}
}
}
private static int findPositionLargestObject(ArrayList<GeometricObject> geoList) {
int maxIndexC = 0;
int maxIndexR = 0;
for(GeometricObject o : geoList)
{
for (int i = 1; i < geoList.size(); i++) {
if (o instanceof Rectangle)
{
if (((Rectangle) geoList.get(i)).getArea() > ((Rectangle) geoList.get(maxIndexR)).getArea()) {
maxIndexR = i;
}
}
if (o instanceof Circle)
{
if (((Circle) geoList.get(i)).getArea() > ((Circle) geoList.get(maxIndexC)).getArea()) {
maxIndexC = i;
}
}
}
}
if (maxIndexC > maxIndexR)
{
return maxIndexC;
}
else
return maxIndexR;
}
}
My GeometricObject實際上沒有getArea()方法。我的推理是如何知道是否檢索圓形或矩形區域,因爲它們需要不同的公式? –
@RiFFRAFF可以使用抽象方法很容易地解決(http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html)。儘管您可以簡單地使用第二種解決方案,但如果您不想修改'GeometricObject'的代碼。 – Paul
那麼我的GeometricObject類是抽象的,我的Circle和Rectangle類擴展它,我仍然沒有看到我能夠告訴我的GeometricObject的getArea方法我試圖使用哪一個。 –