使用两个数据字段

时间:2018-01-31 01:29:27

标签: java sorting object arraylist methods

坚持排序ArrayLists的问题。我确信答案非常简单,而且我一直在忽视这一点,但过去几个小时我一直在努力解决这个问题,只需要别人的眼睛。

这是一个实验室项目,要求我们制作3个自定义类; Applications.java,Rectangle.java和RectangleList.java,我必须对包含长度和宽度数据字段的Rectangle对象的ArratList进行排序。

顺序是(W1,L1)> (W2,L2)当且仅当[(W1> W2)或(W1 = W2且L1> L2)

我不确定需要哪些代码来寻求帮助,但我知道我应该使用for循环而没有外部预先制作的排序方法。我应该在每个索引中运行for循环,并将该索引与其他索引进行比较,然后切换值。我当前的一些代码要么没有做任何事情(没有排序发生),或者它会引发重复。只是很多事情正在发生,我已经删除了所有内容,并开始了很多次。不知道从哪里开始,我不知道怎么想这个问题。

谢谢,请告诉我您需要查看的内容,我会尝试发布。

编辑注释:我们不允许使用比较器或类似的或任何其他我不了解的比较方法。

/////////////////////////////////////////////// ////////////////////////////// 我想通了!

for(int index = 0; index < (list.boxes.size()-1); index++){
    minIndex = index;

    for(int index2 = index+1; index2 < list.boxes.size(); index2++){
        if((list.boxes.get(minIndex).getLength() > list.boxes.get(index2).getLength()) || (list.boxes.get(minIndex).getLength() == list.boxes.get(index2).getLength() && list.boxes.get(minIndex).getWidth() > list.boxes.get(index2).getWidth())){
            minIndex = index2;
        }
    }
    list.boxes.set(index, list.boxes.set(minIndex, list.boxes.get(index)));
}

1 个答案:

答案 0 :(得分:0)

我认为比较器可以帮助你:

Collections.sort(rectList, new Comparator<Rectangle>() {
    @Override
    public int compare(Rectangle rect1, Rectangle rect2) {
        if(rect1.width > rect2.width)
            return -1;
        else if(rect1.width == rect2.width && rect1.length > rect2.length)
            return -1;
        else if(rect1.width == rect2.width && rect1.length == rect2.length)
            return 0;
        else
            return 1;
    }
});

如果您使用的是Java8,则可以使用Lambda表达式来缩小代码。