質問編集履歴

2

借用したコードの詳細を追記いたしました。

2020/11/26 01:33

投稿

kotton92
kotton92

スコア2

test CHANGED
File without changes
test CHANGED
@@ -242,18 +242,118 @@
242
242
 
243
243
 
244
244
 
245
-
246
-
247
-
248
-
249
-
250
-
251
-
252
-
253
-
254
-
255
-
256
-
257
-
258
-
259
- ```
245
+ ```
246
+
247
+
248
+
249
+
250
+
251
+ ###借用したコード
252
+
253
+
254
+
255
+ 上記にて理解が浅いと記載した部分のコードにつきましては、以下のwebページから借用いたしました。
256
+
257
+ https://blog.y-yuki.net/entry/2018/08/22/094000
258
+
259
+
260
+
261
+
262
+
263
+ ```
264
+
265
+ import java.util.Arrays;
266
+
267
+ import java.util.Random;
268
+
269
+ import java.util.concurrent.ThreadLocalRandom;
270
+
271
+
272
+
273
+ public class FisherYatesShuffleSample {
274
+
275
+
276
+
277
+ public static void main(String[] args) {
278
+
279
+ int[] targetArray = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9};
280
+
281
+
282
+
283
+ // シャッフルする前
284
+
285
+ printArray(targetArray, "No Shuffle");
286
+
287
+
288
+
289
+ // シャッフル1回目
290
+
291
+ shuffle(targetArray);
292
+
293
+ printArray(targetArray, "Shuffle 1 ");
294
+
295
+
296
+
297
+ // シャッフル2回目
298
+
299
+ shuffle(targetArray);
300
+
301
+ printArray(targetArray, "Shuffle 2 ");
302
+
303
+
304
+
305
+ // シャッフル3回目
306
+
307
+ shuffle(targetArray);
308
+
309
+ printArray(targetArray, "Shuffle 3 ");
310
+
311
+ }
312
+
313
+
314
+
315
+ public static void shuffle(int[] array) {
316
+
317
+ // 配列が空か1要素ならシャッフルしようがないのので、そのままreturn
318
+
319
+ if (array.length <= 1) {
320
+
321
+ return;
322
+
323
+ }
324
+
325
+
326
+
327
+ // Fisher–Yates shuffle
328
+
329
+ Random rnd = ThreadLocalRandom.current();
330
+
331
+ for (int i = array.length - 1; i > 0; i--) {
332
+
333
+ int index = rnd.nextInt(i + 1);
334
+
335
+ // 要素入れ替え(swap)
336
+
337
+ int tmp = array[index];
338
+
339
+ array[index] = array[i];
340
+
341
+ array[i] = tmp;
342
+
343
+ }
344
+
345
+ }
346
+
347
+
348
+
349
+ private static void printArray(int[] array, String headerComment) {
350
+
351
+ System.out.printf("%s -> %s\n\n", headerComment, Arrays.toString(array));
352
+
353
+ }
354
+
355
+ }
356
+
357
+
358
+
359
+ ```

1

どのように結果が出力されることを望むかについての詳細を追記いたしました。

2020/11/26 01:32

投稿

kotton92
kotton92

スコア2

test CHANGED
File without changes
test CHANGED
@@ -4,15 +4,51 @@
4
4
 
5
5
  Figure型の配列figures1,2を用意します。
6
6
 
7
- figures1の配列の中身をランダムにシャッフルしたものをfigures2に格納したいと考えております。
7
+ figures1の配列の中身を重複なくランダムにシャッフルしたものをfigures2に格納し、figure2に格納され図形をそれぞれ
8
+
8
-
9
+ 図形:面積
10
+
9
-
11
+ という形で出力したいです。
12
+
13
+
14
+
10
-
15
+ また、可能であればRectangle1,Rectangle2,Circle1,Circle2という風に図形に番号を割り当てたいと考えております。
16
+
17
+
18
+
19
+
20
+
21
+
22
+
11
-
23
+ #求める出力結果
24
+
12
-
25
+ Rectangle1:200
26
+
13
-
27
+ Circle2:78.5
28
+
14
-
29
+ Circle1:1962.5
30
+
31
+ Rectangle2:600
32
+
33
+
34
+
35
+
36
+
37
+ ここで書いたRectangle,Circle,Circle,Rectangleという順番はあくまで一例なので子の通りでなく、他の順番で出力されてもかまいません。
38
+
39
+
40
+
41
+
42
+
15
- 以下のようにコードを書いころうまく結果が出力されませんでした。
43
+ 以下のコードを書いて実行すると、
44
+
45
+ ```
46
+
47
+ temp=figures1[index];
48
+
49
+ ```
50
+
51
+ のところで、デバッグされ実行できなくなります。
16
52
 
17
53
 
18
54
 
@@ -94,11 +130,19 @@
94
130
 
95
131
  for(i=0;i<figures2.length;i++) {
96
132
 
133
+
134
+
135
+
136
+
97
- System.out.println(figures2[i].getClass().getName()+":"+figures2[i].getArea());
137
+ System.out.println(figures2[i].getClass().getName()+":"+figures2[i].getArea());
98
-
138
+
99
- }
139
+ }
100
-
140
+
101
- }
141
+ }
142
+
143
+
144
+
145
+
102
146
 
103
147
  class Figure{
104
148