我有一個這樣的數組:交換價值
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;
但是,這是行不通的,因爲我認爲這是通過引用而不是值。
我有一個這樣的數組:交換價值
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;
但是,這是行不通的,因爲我認爲這是通過引用而不是值。
該問題與使用引用有關。
必須使用System.arraycopy(array, 0, otherArray, 0, array.length);
作爲複製方法。
請問您可以發佈多一點的代碼,說明該解決方案如何解決您的問題? – SubOptimal
像這樣?
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));
}
如果它們的大小不同,則需要分配一個新數組或僅複製一定範圍。
您的代碼工作正常。見下文
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]
@Kon,我正在處理一個多維數組...... – Christopher
你看到了什麼錯誤?在代碼中取得意想不到的結果? – Ryan
這應該工作。可能是別的東西不行?郵政輸出你得到或任何錯誤。 – hitz