ArrayLists遇到麻烦

问题描述 投票:1回答:2

我正在尝试将“装箱”的整数搜索到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++;
        }
    }
}
java for-loop arraylist
2个回答
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));

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]

© www.soinside.com 2019 - 2024. All rights reserved.