【问题标题】:Find the largest area of various Shape objects from an ArrayList从 ArrayList 中查找各种 Shape 对象的最大面积
【发布时间】:2018-03-09 02:35:27
【问题描述】:

理想情况下,我不希望它是静态的或无效的。这是我目前可以让它工作的唯一方法。

我有一个 Shape 超类。它有一个 area() 方法,我在 Rectangle 类和 Circle 类中 @Override。在我使用 File IO 的主要方法中。我正在尝试制作一种方法来遍历我的 ArrayList of Shapes,以找到最大的 area()。

当我尝试不同的事情时,我得到了几个不同的错误。当我尝试类似的东西时,形状最大 = 最大.get(0).area();我收到一条错误消息,说我无法将双精度转换为形状。

我希望能够从我的arrayList 中获取一个区域,然后将其与该ArrayList 中的其他区域进行比较,并执行排序方法以找到最大的并将其存储并返回。另外,当我尝试返回时,它不会让我这样做,因为它不是静态的。

但我不能将其他方法设为静态,这不是设计的一部分。 以下是我一直在尝试使用 foreach 的方法,我知道这是不对的,但我可以潜在地使用它吗?我怎样才能让它存储我创建的对象 e 而不会每次都覆盖它?

如果上传更多代码会有帮助,请告诉我。

Java

public static void shapeWithLargestArea(ArrayList<Shape> shapes) {

     for(Shape e: shapes) {
         double largest = e.area();
           if (e.area() > largest) {
               largest = e.area();
           }
            System.out.println(largest);
     } // end for each loop


} // end largest area method 

【问题讨论】:

标签: java object arraylist foreach


【解决方案1】:

您的代码无法使用Shape largest = largest.get(0).area(); 编译,因为您的 area() 方法返回一个double,并且您尝试放入一个类型为Shape 的变量。

你可以实现这个

public static Shape shapeWithLargestArea(ArrayList<Shape> shapes) {
    Shape largestShape = null;
    for(Shape shape: shapes) {
        if(largestShape == null || shape.area() > largestShape.area())
            largestShape = shape;
    } 
    return largestShape;
}

但在 java 8 中,我认为您可以使用流编写更优雅的代码

在你的 Shape 类中编写一个内部比较器类:

private static class ShapeAreaComparator implements Comparator<Shape> {
    @Override
    public int compare(Shape s1, Shape s2) {
        return s1.area().compareTo(s2.area());
    }
}

并像这样在类的静态方法中使用它

public static Shape shapeWithLargestArea(ArrayList<Shape> shapes) {
    return shapes.stream().max(new ShapeAreaComparator()).get();
}

但是你的 area() 方法必须返回一个 Double 而不是一个 double 才能使用 compareTo() 方法

【讨论】:

  • 对不起,多次编辑,现在我认为它有效
  • 效果很好。非常感谢你。我喜欢 ForEaches!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 2011-11-16
  • 2013-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多