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

2 に答える 2

4

以下の理由を挙げてクローズされたこのバグレポートをご覧ください。Not an Issue

正当な理由により、配列全体のオートボクシングは指定された動作ではありません。大規模な配列の場合、非常に高価になる可能性があります。

したがって、配列をリストに変換するには、これを行う必要があります

List<Integer> test = new ArrayList<Integer>(S.length);
for (int i : S) {
    test.add(i);
}
于 2013-10-09T08:06:33.193 に答える
3

プリミティブは自動ボックス化されますが、配列はそうではありません。int[] を Integer[] に変更すると機能します

于 2013-10-09T08:04:25.880 に答える