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

回答編集履歴

1

補足を追加

2020/07/22 13:29

投稿

Daregada
Daregada

スコア11990

answer CHANGED
@@ -1,3 +1,44 @@
1
1
  `0`から`q.length - 1`までの整数の配列を作成し、これを**シャッフル**して、得られた配列の値をインデックスとして順番に出題すればいい。
2
2
 
3
- シャッフルには、有名なアルゴリズムがあるので「フィッシャー・イエーツ」(Fisher-Yates)で検索してください。
3
+ シャッフルには、有名なアルゴリズムがあるので「フィッシャー・イエーツ」(Fisher-Yates)で検索してください。
4
+
5
+ 追加分: こんな感じの「0から問題数-1までの整数値がシャッフルされた配列XXX」を開始時に作成しておき、出題時には「配列XXXの残り問題数(count)をインデックスとする要素から整数値を取得し、それを問題や解答のインデックスとして使う」ようにすればいいのでは。
6
+
7
+ ```Java
8
+ import java.util.Random;
9
+
10
+ public class shufflecheck {
11
+ public static void main(String args[]) {
12
+ int n = 11;
13
+
14
+ int[] indexes = getShuffledIndexes(n);
15
+
16
+ for (int i = 0; i < n - 1; i++) {
17
+ System.out.print(indexes[i] + ", ");
18
+ }
19
+ System.out.println(indexes[n - 1]);
20
+
21
+ }
22
+
23
+ public static int[] getShuffledIndexes(int n) {
24
+ if (n <= 0) {
25
+ return null;
26
+ }
27
+ int[] indexes = new int[n];
28
+ for (int i = 0; i < n; i++) {
29
+ indexes[i] = i;
30
+ }
31
+
32
+ Random rand = new Random();
33
+
34
+ for (int i = n - 1; i >= 1; i--) {
35
+ int j = rand.nextInt(i + 1);
36
+ int tmp = indexes[j];
37
+ indexes[j] = indexes[i];
38
+ indexes[i] = tmp;
39
+ }
40
+
41
+ return indexes;
42
+ }
43
+ }
44
+ ```