回答編集履歴

3

内容の誤りを訂正

2016/12/11 09:48

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -1,13 +1,33 @@
1
1
  Java言語に限らずコピーには浅いコピー(shallow copy)と深いコピー(deep copy)という概念がありますが本件は(javaの多次元配列はC/C++/C#などでジャグ配列と呼ばれるもので「配列オブジェクトの入れ子」構造で実現されているため)deep copy問題にあたります。
2
-
3
-
4
-
5
- プリミティブ型の多次元配列などの深いコピーについてはユーティリティーメソッドがあるので簡単に行えます。`Arrays#copyOf`のリファレンスを参照してみるとよいでしょう。
6
-
7
- 訂正:すみませんcopyOfはshallow copyのような気がするので確認します。
8
2
 
9
3
 
10
4
 
11
5
  ちなみに浅いコピー・深いコピーの一般問題は`Object#clone`のリファレンスを読み、色々実験してみるとよいと思います。
12
6
 
13
7
 
8
+
9
+ ---
10
+
11
+
12
+
13
+ 訂正:最初の回答にArrays#copyOfでdeep copyができると書きましたがそれは間違いでshallow copyでした。大変失礼しました。
14
+
15
+ forループのネストは確かに今一つな感じですが汎用的なコピーメソッドはないようで、それを書こうとするとややこしくなりそうなので次元数が固定ならforループが一番素朴で分かりやすいかも知れません。最後の次元だけは若干簡単にかけます。
16
+
17
+ ```
18
+
19
+ state = new char[6][3][];
20
+
21
+ for (int surface = 0 ; surface < 6 ; surface++){
22
+
23
+ for (int j = 0; j < 3; j++){
24
+
25
+ state[surface][j] = Arrays.copyOf(finished_state[surface][j], 3);
26
+
27
+ }
28
+
29
+ }
30
+
31
+ ```
32
+
33
+

2

訂正

2016/12/11 09:47

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -4,6 +4,8 @@
4
4
 
5
5
  プリミティブ型の多次元配列などの深いコピーについてはユーティリティーメソッドがあるので簡単に行えます。`Arrays#copyOf`のリファレンスを参照してみるとよいでしょう。
6
6
 
7
+ 訂正:すみませんcopyOfはshallow copyのような気がするので確認します。
8
+
7
9
 
8
10
 
9
11
  ちなみに浅いコピー・深いコピーの一般問題は`Object#clone`のリファレンスを読み、色々実験してみるとよいと思います。

1

誤記訂正

2016/12/11 09:21

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -2,10 +2,10 @@
2
2
 
3
3
 
4
4
 
5
- プリミティブ型の多次元配列の深いコピーについてはユーティリティーメソッドがあるので実は簡単行えます。
5
+ プリミティブ型の多次元配列などの深いコピーについてはユーティリティーメソッドがあるので簡単行えます。`Arrays#copyOf`のリファレンスを参照してみるとよいでしょう。
6
-
7
- `Arrays#copyOf`を参照してみるとよいでしょう。
8
6
 
9
7
 
10
8
 
11
9
  ちなみに浅いコピー・深いコピーの一般問題は`Object#clone`のリファレンスを読み、色々実験してみるとよいと思います。
10
+
11
+