回答編集履歴

3

追加

2022/10/26 12:43

投稿

jimbe
jimbe

スコア12659

test CHANGED
@@ -10,3 +10,104 @@
10
10
  当たり/外れの if が 4 つ並んでますが、当たりは b == b1 とし、 外れは else にすればそんなに必要ありません。
11
11
 
12
12
  scanner は close したらもう使えません。
13
+
14
+ エラーで入力を繰り返すような場合は、入力部分をメソッドとして取り出してしまうほうが、全体の入れ子が深くならずに済みます。
15
+ ```java
16
+ package teratail_java.q_5vhgagiqxg5chr;
17
+
18
+ import java.util.Random;
19
+ import java.util.Scanner;
20
+
21
+ public class Main {
22
+ public static void main(String[] args) {
23
+ Random random = new Random(System.currentTimeMillis());
24
+ Scanner scanner = new Scanner(System.in);
25
+
26
+ int syojikin = 100;
27
+ System.out.println("所持金=" + syojikin);
28
+ do {
29
+ int kakekin = inputKAKEKIN(scanner, syojikin);
30
+ if(kakekin == 0) break;
31
+
32
+ syojikin -= kakekin;
33
+ System.out.println("残高=" + syojikin);
34
+
35
+ int bet = inputBet(scanner);
36
+
37
+ int sai = random.nextInt(6) + 1;
38
+ System.out.println(sai);
39
+ if(sai%2 == bet%2) {
40
+ System.out.println("当たり!");
41
+ syojikin += (kakekin * 2);
42
+ } else {
43
+ System.out.println("はずれ!");
44
+ }
45
+
46
+ System.out.println("残高=" + syojikin);
47
+ } while(syojikin > 0);
48
+ }
49
+
50
+ private static int inputKAKEKIN(Scanner scanner, int syojikin) {
51
+ while(true) {
52
+ System.out.print("掛け金を入力:");
53
+ String kakekinsc = scanner.nextLine();
54
+ if(kakekinsc.equals("end")) return 0; //end
55
+
56
+ int kakekin = Integer.parseInt(kakekinsc);
57
+ if(kakekin > syojikin) {
58
+ System.out.println("所持金以上の金額は賭けられません。");
59
+ continue;
60
+ }
61
+ return kakekin;
62
+ }
63
+ }
64
+
65
+ private static int inputBet(Scanner scanner) {
66
+ while(true) {
67
+ try {
68
+ System.out.println("半(=1)か丁(=2)か?");
69
+ String betsc = scanner.nextLine();
70
+ int bet = Integer.parseInt(betsc);
71
+ if(bet != 1 && bet != 2) {
72
+ System.out.println("【エラー】入力できるのは1と2です");
73
+ continue;
74
+ }
75
+ return bet;
76
+ } catch(NumberFormatException e) {
77
+ System.out.println("【エラー】入力できるのは整数だけです");
78
+ }
79
+ }
80
+ }
81
+ }
82
+ ```
83
+ 実行結果
84
+ ```plain
85
+ 所持金=100
86
+ 掛け金を入力:50
87
+ 残高=50
88
+ 半(=1)か丁(=2)か?
89
+ 1
90
+ 2
91
+ はずれ!
92
+ 残高=50
93
+ 掛け金を入力:10
94
+ 残高=40
95
+ 半(=1)か丁(=2)か?
96
+ 3
97
+ 【エラー】入力できるのは1と2です
98
+ 半(=1)か丁(=2)か?
99
+ 0
100
+ 【エラー】入力できるのは1と2です
101
+ 半(=1)か丁(=2)か?
102
+ 1.5
103
+ 【エラー】入力できるのは整数だけです
104
+ 半(=1)か丁(=2)か?
105
+ abc
106
+ 【エラー】入力できるのは整数だけです
107
+ 半(=1)か丁(=2)か?
108
+ 1
109
+ 6
110
+ はずれ!
111
+ 残高=40
112
+ 掛け金を入力:end
113
+ ```

2

追加

2022/10/26 12:28

投稿

jimbe
jimbe

スコア12659

test CHANGED
@@ -6,3 +6,7 @@
6
6
 
7
7
  半丁の入力では、Integer.parseInt して 1,2 かチェックした後に isDigit をチェックしても意味はありません。
8
8
  数値で無ければ parseInt が先に例外を発します。
9
+
10
+ 当たり/外れの if が 4 つ並んでますが、当たりは b == b1 とし、 外れは else にすればそんなに必要ありません。
11
+
12
+ scanner は close したらもう使えません。

1

追加

2022/10/26 12:21

投稿

jimbe
jimbe

スコア12659

test CHANGED
@@ -3,3 +3,6 @@
3
3
  while (!scanner.nextLine().equals("end")) {
4
4
  ```
5
5
  などとやってしまっては、 "end" 以外の文字列が入力されていたとしても、もうその文字列は次に next() しても取り出せません。
6
+
7
+ 半丁の入力では、Integer.parseInt して 1,2 かチェックした後に isDigit をチェックしても意味はありません。
8
+ 数値で無ければ parseInt が先に例外を発します。