2013-10-09 62 views
1

我有以下代碼:自動裝盒不工作?

static boolean nextPerm(int[] A) { 
     int N = A.length; 
     int k = N - 1; 
     int[] S = { }; 
     while (k >= 0) { 
      if (S.length > 0 && containsLarger(S, A[k])) { 
       int v = firstLargest(S, A[k]); 
       //int vIndex = Arrays.asList(S).indexOf(v); 
       List<Integer> test = Arrays.asList(S); // // ERRORS HERE. Before error, S is { 2 } 
       System.out.println(test.get(0)); 
       int vIndex = test.indexOf(S); 
       S[vIndex] = A[k]; 
       A[k] = v; 
       System.arraycopy(S, 0, A, k + 1, N - k); 
       return true; 
      } else { 
       S = addIntAscend(S, A[k]); 
       k -= 1; 
      } 
     } 
     return false; 
    } 

錯誤之前,S是一個int數組{2}。當我將TEST設置爲Arrays.asList(S)時發生錯誤:

Perms.java:44: error: incompatible types 
       List<Integer> test = Arrays.asList(S); 
               ^
    required: List<Integer> 
    found: List<int[]> 
1 error 

爲什麼會發生這種情況?我認爲原始圖像是自動複製的?

回答

4

看看這個bug report關閉作爲Not an Issue引用下面的原因。

自動裝箱整個數組沒有指定行爲,爲好 的原因。對於大型陣列而言,這可能過於昂貴。

因此,你的數組轉換爲一個列表,你需要做的這個

List<Integer> test = new ArrayList<Integer>(S.length); 
for (int i : S) { 
    test.add(i); 
} 
3

基元自動複製,但數組不是。 它會工作,如果你改變你的int []的整數[]的

+1

但是看看下面這個例子。 http://stackoverflow.com/a/6171675/2288418他將一個int數組傳遞給asList,並能夠獲取它的索引。編輯:沒關係,他的例子LOL中有一個錯誤。 –