回答編集履歴

3

テキスト修正

2018/01/27 09:51

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -176,7 +176,7 @@
176
176
 
177
177
  1. リスト型の変数を宣言するとき、左辺には `ArrayList`を使わず、インタフェース型の`List`にしておく。
178
178
 
179
- 2. リストの初期化の辺で、`ArrayList<・・・>`の `・・・` は省略してもよい。
179
+ 2. リストの初期化の辺で、`ArrayList<・・・>`の `・・・` は省略してもよい。
180
180
 
181
181
  3. `m` と `p` の、`shuffle`される前の状態のものは `Arrays.asList`を使えば、それぞれ1行で書ける。
182
182
 

2

テキスト修正

2018/01/27 09:51

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -178,7 +178,7 @@
178
178
 
179
179
  2. リストの初期化の左辺で、`ArrayList<・・・>`の `・・・` は省略してもよい。
180
180
 
181
- 3. `m` と `p` の、`shuffle`される前の状態のものは `Arrays.asList`を使えば1行で書ける。
181
+ 3. `m` と `p` の、`shuffle`される前の状態のものは `Arrays.asList`を使えば、それぞれ1行で書ける。
182
182
 
183
183
 
184
184
 

1

テキスト修正

2018/01/27 09:17

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -137,3 +137,109 @@
137
137
 
138
138
 
139
139
  参考になりましたら幸いです。
140
+
141
+
142
+
143
+ ---
144
+
145
+ 追記
146
+
147
+
148
+
149
+ (1) なぜ修正前のだとダメか
150
+
151
+
152
+
153
+ なぜ修正前のだと意図通りにならないのかというと、
154
+
155
+ リストのリストである `mp` や `wp`のそれぞれに、
156
+
157
+ 5 個の別々のリストを要素として追加しているつもりでも、
158
+
159
+ 実際には、`m` および `w` の1個の同じリストオブジェクトを
160
+
161
+ 5回追加しているだけだからです。(直感的にいえば、「同じものが5個入っている」的なイメージ)
162
+
163
+ 意図したように動かすには `shuffle` される直前で毎回`m` および `w`を
164
+
165
+ 前回のループのときとは**別物として**作る必要があります。
166
+
167
+
168
+
169
+ (2) リファクタ
170
+
171
+
172
+
173
+ 回答に載せた、修正後のコードを以下の点でリファクタしてみました。
174
+
175
+
176
+
177
+ 1. リスト型の変数を宣言するとき、左辺には `ArrayList`を使わず、インタフェース型の`List`にしておく。
178
+
179
+ 2. リストの初期化の左辺で、`ArrayList<・・・>`の `・・・` は省略してもよい。
180
+
181
+ 3. `m` と `p` の、`shuffle`される前の状態のものは `Arrays.asList`を使えば1行で書ける。
182
+
183
+
184
+
185
+ これらを適用すると、以下のようにも書けます。
186
+
187
+
188
+
189
+ ```java
190
+
191
+ import java.util.ArrayList;
192
+
193
+ import java.util.Arrays;
194
+
195
+ import java.util.Collections;
196
+
197
+ import java.util.List;
198
+
199
+
200
+
201
+ public class Main {
202
+
203
+
204
+
205
+ public static void main(String[] args) {
206
+
207
+
208
+
209
+ List<List<Integer>> mp = new ArrayList<>();
210
+
211
+ List<List<Integer>> wp = new ArrayList<>();
212
+
213
+
214
+
215
+ for (int i = 1; i <= 5; i++) {
216
+
217
+
218
+
219
+ List<Integer> m = Arrays.asList(1, 2, 3, 4, 5);
220
+
221
+ List<Integer> w = Arrays.asList(1, 2, 3, 4, 5);
222
+
223
+
224
+
225
+ Collections.shuffle(m);
226
+
227
+ Collections.shuffle(w);
228
+
229
+
230
+
231
+ mp.add(m);
232
+
233
+ wp.add(w);
234
+
235
+ }
236
+
237
+
238
+
239
+ System.out.println(mp);
240
+
241
+ }
242
+
243
+ }
244
+
245
+ ```