gpt4 book ai didi

java - 从 ArrayList 中查找各种 Shape 对象的最大面积

转载 作者:行者123 更新时间:2023-12-02 12:12:15 27 4
gpt4 key购买 nike

理想情况下,我不希望它是静态的或无效的。这是我目前能够让它发挥作用的唯一方法。

我有一个 Shape 父类(super class)。它有一个 area() 方法,我在 Rectangle 类和 Circle 类中 @Override 。在我的主要方法中使用文件 IO。我正在尝试创建一种方法来迭代我的形状数组列表,以找到最大的面积()。

当我尝试不同的事情时,我遇到了一些不同的错误。当我尝试类似的方法时,Shapelargest=largest.get(0).area();我收到一条错误消息,说我无法将 double 型转换为形状。

我希望能够从我的 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

最佳答案

您的代码无法使用 Shapelargest =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()方法

关于java - 从 ArrayList 中查找各种 Shape 对象的最大面积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46450690/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com