回答編集履歴

4

コードコメント修正

2023/03/12 06:26

投稿

jimbe
jimbe

スコア12648

test CHANGED
@@ -124,7 +124,7 @@
124
124
  Random r = new Random();
125
125
  for(int i=array.length; i>0; i--) {
126
126
  int j = r.nextInt(i);
127
- { int t = array[i-1]; array[i-1] = array[j]; array[j] = t; } //[i] と [j] を交換
127
+ { int t = array[i-1]; array[i-1] = array[j]; array[j] = t; } //[i-1] と [j] を交換
128
128
  }
129
129
  }
130
130
  }

3

修正

2023/03/12 06:23

投稿

jimbe
jimbe

スコア12648

test CHANGED
@@ -1,4 +1,5 @@
1
1
  List に必要な分の数値を用意して、 shuffle メソッドで並び替え、先頭から使います。
2
+ → 配列化しました。
2
3
  ```java
3
4
  import java.util.Random;
4
5
  import java.util.Scanner;

2

配列仕様

2023/03/12 06:21

投稿

jimbe
jimbe

スコア12648

test CHANGED
@@ -1,6 +1,7 @@
1
1
  List に必要な分の数値を用意して、 shuffle メソッドで並び替え、先頭から使います。
2
2
  ```java
3
- import java.util.*;
3
+ import java.util.Random;
4
+ import java.util.Scanner;
4
5
 
5
6
  public class Bingo {
6
7
  public static void main(String[] args) {
@@ -9,9 +10,7 @@
9
10
 
10
11
  Scanner scanner = new Scanner(System.in);
11
12
 
12
- List<Integer> list = new ArrayList<>(75);
13
+ int[] list = IntArrayUtils.generate(75, 1, true);
13
- for(int i=1; i<=75; i++) list.add(i); //ビンゴ玉を75個用意
14
- Collections.shuffle(list); //シャッフル
15
14
 
16
15
  for(int number : list) { //先頭から順に取り出す
17
16
  String enter = scanner.nextLine();
@@ -37,15 +36,12 @@
37
36
  private static class Card {
38
37
  private int[][] numbers = new int[5][5];
39
38
  private int reach = 0;
40
- private int congratulation = 0;
39
+ private int bingo = 0;
41
40
 
42
41
  Card() {
43
- List<Integer> list = new ArrayList<>();
44
42
  for(int i=0; i<5; i++) {
45
- list.clear();
46
- for(int j=0, k=i*15+1; j<15; j++, k++) list.add(k); //各行用の数値を用意
47
- Collections.shuffle(list); //シャッフル
43
+ int[] list = IntArrayUtils.generate(15, i*15+1, true);
48
- for(int j=0; j<5; j++) numbers[j][i] = list.get(j); //5個だけ使う
44
+ for(int j=0; j<5; j++) numbers[j][i] = list[j]; //5個だけ使う
49
45
  }
50
46
  numbers[2][2] = 0;
51
47
  }
@@ -54,7 +50,7 @@
54
50
  return reach;
55
51
  }
56
52
  int getBingo() {
57
- return congratulation;
53
+ return bingo;
58
54
  }
59
55
 
60
56
  boolean mark(int number) {
@@ -83,10 +79,10 @@
83
79
  }
84
80
 
85
81
  reach = 0;
86
- congratulation = 0;
82
+ bingo = 0;
87
83
  for(int c : counts) {
88
84
  if(c == 4) reach ++;
89
- if(c == 5) congratulation ++;
85
+ if(c == 5) bingo ++;
90
86
  }
91
87
  }
92
88
 
@@ -108,4 +104,27 @@
108
104
  }
109
105
  }
110
106
  }
107
+
108
+ class IntArrayUtils {
109
+ /** origin ~ origin+size-1 の値の入った int 配列を生成する
110
+ * @param size 配列の大きさ
111
+ * @param origin 格納する開始値
112
+ * @param shuffle ランダムに並び替える場合に true
113
+ * @return 生成した配列 */
114
+ static int[] generate(int size, int origin, boolean shuffle) {
115
+ int[] a = new int[size];
116
+ for(int i=0; i<size; i++) a[i] = origin + i;
117
+ if(shuffle) shuffle(a);
118
+ return a;
119
+ }
120
+ /** array をランダムに並び替える
121
+ * @param array 対象配列 */
122
+ static void shuffle(int[] array) {
123
+ Random r = new Random();
124
+ for(int i=array.length; i>0; i--) {
125
+ int j = r.nextInt(i);
126
+ { int t = array[i-1]; array[i-1] = array[j]; array[j] = t; } //[i] と [j] を交換
127
+ }
128
+ }
129
+ }
111
130
  ```

1

カード初期値の行・列が逆だった

2023/03/11 19:32

投稿

jimbe
jimbe

スコア12648

test CHANGED
@@ -45,7 +45,7 @@
45
45
  list.clear();
46
46
  for(int j=0, k=i*15+1; j<15; j++, k++) list.add(k); //各行用の数値を用意
47
47
  Collections.shuffle(list); //シャッフル
48
- for(int j=0; j<5; j++) numbers[i][j] = list.get(j); //5個だけ使う
48
+ for(int j=0; j<5; j++) numbers[j][i] = list.get(j); //5個だけ使う
49
49
  }
50
50
  numbers[2][2] = 0;
51
51
  }