前提・実現したいこと
多次元配列を、別の多次元配列にコピーしたとき
2つの配列の中身が連動しないようにしたいです。
発生している問題・エラーメッセージ
1つ目の配列を2つ目の配列に代入してから、2つ目の配列の要素に変更を加えると
1つ目の配列の要素も変更されてしまいます。
なんとなく原因は、メモリの参照先が同じになってしまっているのかなと予測はつきますが、
その回避方法がわかりません。
該当のソースコード
Java
1public static void main(String args[]) { 2 3 int[][] arr = {{1, 1},{1, 1}}; 4 5 int[][] arr2 = new int[2][2]; 6 arr2 = arr; 7 8 arr2[0][0] = 0; 9 arr2[0][1] = 0; 10 arr2[1][0] = 0; 11 arr2[1][1] = 0; 12 13 System.out.println(arr[0][0] +","+ arr[0][1]); 14 System.out.println(arr[1][0] +","+ arr[1][1]); 15 16}
output
10,0 20,0
試したこと
java
1arr2 = arr.clone();
↑でのコピーも試しましたが、結果は変わりませんでした。
java
1for(int i = 0 ; i < 2 ; i++) { 2 for(int j = 0 ; j < 2 ; j++) { 3 arr2[i][j] = arr[i][j]; 4 } 5}
↑のように、
配列を1要素ずつfor文でコピーしていくやり方では、要素の連動は起きませんでしたが
要素数がわからない場合や、次元が増えたときにコードが複雑になるのを避けたいため
1要素ずつコピーする以外の回避方法が知りたいです。
よろしくお願いします。
追記
1つ目の配列の状態を2つ目の配列に保存しておき、
1つ目の配列の要素を変更したのちに、元の状態に戻す事を実現したいです。
例えば、順に並べられた数字の配列を定義して、その状態を初期状態配列に保存しておき、数字の配列の順番をシャッフルする。
その後、シャッフルした配列を並べられた状態に戻したいです。
今のままだと、数字の配列をシャッフルしたときに、初期状態配列も一緒にシャッフルされてしまいます。
回答1件
あなたの回答
tips
プレビュー