坚持排序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)));
}
答案 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表达式来缩小代码。