对填充有自定义对象的 ArrayList 对象进行排序,每个对象有两个数据字段



卡在对ArrayLists进行排序时出现问题。我相信答案真的很容易,而且我一直忽略了,但在过去的几个小时里,我一直在为此努力,只需要别人的眼睛。

这是一个实验室项目,需要我们制作 3 个自定义类;应用程序.java、矩形.java和矩形列表.java我必须对包含具有长度和宽度数据字段的矩形对象的 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)));
}

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

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表达式来缩小代码。

最新更新