【问题标题】:Having trouble with ArrayListsArrayLists 遇到问题
【发布时间】:2013-10-05 02:56:12
【问题描述】:

我正在尝试在 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


    【解决方案1】:

    你的逻辑有点不对劲。看看你的 if 语句:

    if (tempMin < thing.get(i)) {
    

    您是在询问列表元素是否大于最大 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));
    

    【讨论】:

    【解决方案2】:
    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]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-19
      • 2014-11-30
      • 2021-08-09
      • 2017-05-02
      • 2021-02-01
      • 2012-10-31
      • 2019-07-26
      • 2018-01-07
      相关资源
      最近更新 更多