2013-10-05 59 views
1

我正在尝试在ArrayList中搜索“装箱”整数,并将最低值放入列表的前面。但是,当有新的分钟时,它似乎并没有把它放在前面。例如,如果名为list的变量存储以下值:{3,8,92,4,2,17,9},并且您进行此调用:minToFront(list);它应该在调用后存储以下值:{2,3,8,92,4,17,9}假定列表至少存储一个值。ArrayList出现问题

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++; 
     } 
    } 
} 

回答

3

你的逻辑稍微偏离。看看你的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)); 
+0

为什么在thing.add()里面有thing.remove(minLoc)?我不太明白。 –

+0

请参阅http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#remove(int) - remove()返回刚删除的值,然后传递给add() 。 –