我试图将整数“盒装”搜索到ArrayList中,并将最低值放入列表的前面。但是,当有一个新的分钟时,它似乎并没有把它放在前面。
以下是一些示例:例如,如果名为list的变量存储以下值:{3,8,92,4,2,17,9}并进行此调用:minToFront(list);它应该在调用后存储以下值:{2,3,8,92,4,17,9}假设列表存储至少一个值。
private static void minToFront(ArrayList<Integer> thing) {
int tempMin = Integer.MAX_VALUE;
for (int i = 0; i < thing.size(); i++) {
if (tempMin < thing.get(i)) {
thing.add(0,thing.get(i));
thing.remove(i+1);
i++;
}
}
}
答案 0 :(得分:3)
你的逻辑略有偏差。看看你的if语句:
if (tempMin < thing.get(i)) {
你问的是list元素是否大于最大int值,而这个值永远不会为真。您需要完全遍历列表一次以找到最小值及其位置,然后然后操作列表。
if (thing.size() < 2) // special case
return;
int min = thing.get(0), minLoc = 0;
for (int i = 1; i < thing.size(); i++) {
int next = thing.get(i);
if (next < min) {
min = next;
minLoc = i;
}
}
thing.add(0, thing.remove(minLoc));
答案 1 :(得分:0)
public static void minToFront(ArrayList<Integer> arrayList){
if(arrayList.size() == 0) {
System.out.println("Array is empty");
}
else {
int min = arrayList.get(0);
int index = 0;
for (int i = 0; i < arrayList.size(); i++) {
if (arrayList.get(i) < min)
min = arrayList.get(i);
}
index = arrayList.indexOf(min);
arrayList.remove(index);
arrayList.add(0, min);
}
}
输入:[3,8,92,4,2,17,9]
输出:[2、3、8、92、4、17、9]