交换数组中的值

时间:2015-05-20 21:36:52

标签: java arrays multidimensional-array swap

我有一个这样的数组:

item[0][0] = 1;
item[0][1] = 20;

item[1][0] = 3;
item[1][1] = 40;

item[2][0] = 9;
item[2][1] = 21;


(...)

我想交换这些"值"像:

int[] aux = item[0];

item[0] = item[1];
item[1] = aux;

但是这不起作用,因为我认为它传递参考而不是值。

3 个答案:

答案 0 :(得分:1)

您的代码工作正常。看下面的小片段

int[][] item = {{1, 20}, {3, 40}, {9, 21}};
for (int[] ints : item) {
    System.out.printf("%s ", Arrays.toString(ints));
}
System.out.println("");

// to swap the array item[0] and array item[1]
int[] aux = item[0];
item[0] = item[1];
item[1] = aux;
for (int[] ints : item) {
    System.out.printf("%s ", Arrays.toString(ints));
}
System.out.println("");

<强>输出

[1, 20] [3, 40] [9, 21] 
[3, 40] [1, 20] [9, 21] 

或交换数组中的值(而不是交换两个数组)

// to swap the values of array item[0]
// in the verbose way
int[] aux = item[0];
int temp = aux[0];
aux[0] = aux[1];
aux[1] = temp;
item[0] = aux;    
for (int[] ints : item) {
    System.out.printf("%s ", Arrays.toString(ints));
}
System.out.println("");

<强>输出

[1, 20] [3, 40] [9, 21] 
[20, 1] [3, 40] [9, 21] 

答案 1 :(得分:0)

这样的东西?

public static void swapArrays(int a[], int b[]) {
    if (a.length != b.length) {
        throw new IllegalArgumentException("Arrays must be of same size");
    }

    int temp[] = Arrays.copyOf(a, a.length);
    System.arraycopy(b, 0, a, 0, a.length);
    System.arraycopy(temp, 0, b, 0, a.length);
}

public static void main(String[] args) {
    int a[] = {1, 2, 3};
    int b[] = {3, 4, 5};
    swapArrays(a, b);
    System.out.println(Arrays.toString(b));
}

如果它们的大小不同,则需要分配新数组或仅复制某个范围。

答案 2 :(得分:0)

问题与参考文献的使用有关。

必须使用System.arraycopy(array, 0, otherArray, 0, array.length);作为复制方法。