2013-10-05 84 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() 。 –