teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

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

2020/11/26 01:33

投稿

kotton92
kotton92

スコア2

title CHANGED
File without changes
body CHANGED
@@ -120,11 +120,61 @@
120
120
  }
121
121
 
122
122
 
123
+ ```
123
124
 
124
125
 
126
+ ###借用したコード
125
127
 
128
+ 上記にて理解が浅いと記載した部分のコードにつきましては、以下のwebページから借用いたしました。
129
+ https://blog.y-yuki.net/entry/2018/08/22/094000
126
130
 
127
131
 
132
+ ```
133
+ import java.util.Arrays;
134
+ import java.util.Random;
135
+ import java.util.concurrent.ThreadLocalRandom;
128
136
 
137
+ public class FisherYatesShuffleSample {
129
138
 
139
+ public static void main(String[] args) {
140
+ int[] targetArray = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9};
141
+
142
+ // シャッフルする前
143
+ printArray(targetArray, "No Shuffle");
144
+
145
+ // シャッフル1回目
146
+ shuffle(targetArray);
147
+ printArray(targetArray, "Shuffle 1 ");
148
+
149
+ // シャッフル2回目
150
+ shuffle(targetArray);
151
+ printArray(targetArray, "Shuffle 2 ");
152
+
153
+ // シャッフル3回目
154
+ shuffle(targetArray);
155
+ printArray(targetArray, "Shuffle 3 ");
156
+ }
157
+
158
+ public static void shuffle(int[] array) {
159
+ // 配列が空か1要素ならシャッフルしようがないのので、そのままreturn
160
+ if (array.length <= 1) {
161
+ return;
162
+ }
163
+
164
+ // Fisher–Yates shuffle
165
+ Random rnd = ThreadLocalRandom.current();
166
+ for (int i = array.length - 1; i > 0; i--) {
167
+ int index = rnd.nextInt(i + 1);
168
+ // 要素入れ替え(swap)
169
+ int tmp = array[index];
170
+ array[index] = array[i];
171
+ array[i] = tmp;
172
+ }
173
+ }
174
+
175
+ private static void printArray(int[] array, String headerComment) {
176
+ System.out.printf("%s -> %s\n\n", headerComment, Arrays.toString(array));
177
+ }
178
+ }
179
+
130
180
  ```

1

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

2020/11/26 01:32

投稿

kotton92
kotton92

スコア2

title CHANGED
File without changes
body CHANGED
@@ -1,12 +1,30 @@
1
1
  ###前提・実現したいこと
2
2
 
3
3
  Figure型の配列figures1,2を用意します。
4
- figures1の配列の中身をランダムにシャッフルしたものをfigures2に格納したいと考えております。
4
+ figures1の配列の中身を重複なくランダムにシャッフルしたものをfigures2に格納し、figure2に格納され図形をそれぞれ
5
+ 図形:面積
6
+ という形で出力したいです。
5
7
 
8
+ また、可能であればRectangle1,Rectangle2,Circle1,Circle2という風に図形に番号を割り当てたいと考えております。
6
9
 
7
10
 
8
- 以下のようにコードを書いたところ、うまく結果が出力されませんでした。
9
11
 
12
+ #求める出力結果
13
+ Rectangle1:200
14
+ Circle2:78.5
15
+ Circle1:1962.5
16
+ Rectangle2:600
17
+
18
+
19
+ ここで書いたRectangle,Circle,Circle,Rectangleという順番はあくまで一例なので子の通りでなく、他の順番で出力されてもかまいません。
20
+
21
+
22
+ 以下のコードを書いて実行すると、
23
+ ```
24
+ temp=figures1[index];
25
+ ```
26
+ のところで、デバッグされ実行できなくなります。
27
+
10
28
  原因が分かる方いらっしゃいましたら、教えていただけると幸いです。
11
29
  どうぞよろしくお願いいたします。
12
30
 
@@ -46,9 +64,13 @@
46
64
  }
47
65
 
48
66
  for(i=0;i<figures2.length;i++) {
67
+
68
+
49
- System.out.println(figures2[i].getClass().getName()+":"+figures2[i].getArea());
69
+ System.out.println(figures2[i].getClass().getName()+":"+figures2[i].getArea());
50
70
  }
51
71
  }
72
+
73
+
52
74
  class Figure{
53
75
  static int count = 0;
54
76
  double area =0;