Java 使用迭代器调用多参数方法

Java 使用迭代器调用多参数方法,java,Java,我正在尝试按区域对形状列表进行排序。我使用迭代器遍历列表,并对列表中的每个元素调用Rectangle.calculateArea,但打印的列表不会输出每个元素的面积。相反,输出是对每个元素的十六进制引用。下面是输出,后面是代码。如何使输出显示计算面积 矩形区域: Rectangle@15db9742 Rectangle@6d06d69c Rectangle@7852e922 Rectangle@4e25154f Rectangle@70dea4e public class RectangleSo

我正在尝试按区域对形状列表进行排序。我使用迭代器遍历列表,并对列表中的每个元素调用Rectangle.calculateArea,但打印的列表不会输出每个元素的面积。相反,输出是对每个元素的十六进制引用。下面是输出,后面是代码。如何使输出显示计算面积

矩形区域: Rectangle@15db9742 Rectangle@6d06d69c Rectangle@7852e922 Rectangle@4e25154f Rectangle@70dea4e

public class RectangleSortTest {
public static void main (String[] args) {
List<Rectangle> list = new ArrayList<>();
//Create Rectangle ArrayList

list.add(new Rectangle(4, 3));
list.add(new Rectangle(3, 3));
list.add(new Rectangle(4, 4));
list.add(new Rectangle(5, 1));
list.add(new Rectangle(1, 1));
//Add Rectangle elements to Rectangle list



calculateListArea(list);
//Calculates area for each rectangle element

System.out.print("Rectangle Areas:");
printList(list);
//Print rectangle list after area calculation


}

private static void calculateListArea(List<Rectangle> list) {//Calculates Rectangle list areas
    ListIterator<Rectangle> iterator = list.listIterator();

    while (iterator.hasNext()) {
        Rectangle rectangleElement = iterator.next();
        Rectangle.calculateArea(rectangleElement.getWidth(), rectangleElement.getHeight());
    }
}

private static void printList(List<Rectangle> list) {//Print Rectangle list
    for (Rectangle element: list) {
        System.out.printf("%n%s", element);
    }   
}
公共类矩形件测试{
公共静态void main(字符串[]args){
列表=新的ArrayList();
//创建矩形阵列列表
添加(新矩形(4,3));
添加(新矩形(3,3));
添加(新矩形(4,4));
添加(新矩形(5,1));
添加(新矩形(1,1));
//将矩形元素添加到矩形列表
计算标准a(列表);
//计算每个矩形元素的面积
系统输出打印(“矩形区域:”);
打印列表(列表);
//面积计算后打印矩形列表
}
私有静态void calculateListArea(列表){//计算矩形列表区域
ListIterator迭代器=list.ListIterator();
while(iterator.hasNext()){
矩形矩形元素=迭代器.next();
calculateArea(rectangleElement.getWidth(),rectangleElement.getHeight());
}
}
私有静态无效打印列表(列表列表){//打印矩形列表
用于(矩形元素:列表){
System.out.printf(“%n%s”,元素);
}   
}

}

您可以将其简化如下:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class RectangleSortTest {
    public static void main(String[] args) {

        List<Rectangle> list = new ArrayList<Rectangle>();

        // Add some rectangle to a list
        list.add(new Rectangle(4, 3));
        list.add(new Rectangle(3, 3));
        list.add(new Rectangle(4, 4));
        list.add(new Rectangle(5, 1));
        list.add(new Rectangle(1, 1));

        // Sort the list on area
        Collections.sort(list);

        // Print the list
        System.out.println("Rectangles in ascending order of areas:");
        printList(list);
    }

    static void printList(List<Rectangle> list) {
        for (Rectangle element : list) {
            System.out.println(element);
        }
    }
}

class Rectangle implements Comparable<Rectangle> {
    int width, height, area;

    public Rectangle(int width, int height) {
        this.width = width;
        this.height = height;
    }

    public int getWidth() {
        return width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public int getArea() {
        return width * height;
    }

    @Override
    public int compareTo(Rectangle rectangle) {
        if (this.getArea() > rectangle.getArea())
            return 1;
        else if (this.getArea() == rectangle.getArea())
            return 0;
        else
            return -1;
    }

    @Override
    public String toString() {
        return "Rectangle [width=" + width + ", height=" + height + ", area=" + this.getArea() + "]";
    }
}

您正在调用
calculateArea
,但没有对结果执行任何操作。然后在
System.out.printf
语句中,您只是打印矩形,而不是其面积。您打印的是矩形的实例,而不是计算结果。制作一个返回结果的方法,并在System.out.printf中使用它。
Rectangles in ascending order of areas:
Rectangle [width=1, height=1, area=1]
Rectangle [width=5, height=1, area=5]
Rectangle [width=3, height=3, area=9]
Rectangle [width=4, height=3, area=12]
Rectangle [width=4, height=4, area=16]