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

回答編集履歴

4

問題と思われる記述を追加

2020/03/11 07:01

投稿

jimbe
jimbe

スコア13355

answer CHANGED
@@ -16,10 +16,13 @@
16
16
  }
17
17
  } else {
18
18
  System.out.println("\nもう一度じゃんけんからだよ!");
19
+ break; //これが必要では?
19
20
  }
20
21
  }
21
22
  ```
22
23
  と纏まります.
24
+ そして, おそらく「もう一度じゃんけんから」となった場合は(3回勝負のカウントを上げずに再度じゃんけんをする為に) あっちむいてほいの while ループを抜けるため break を書かなくてはいけないと思うのですが, case 内では書けませんので, このように纏めたほうがよいのではと思います.
25
+ また, ご提示のコードの最後にある return 0 は削除しないと, 数字以外や範囲外の数値を入力等の場合に3回勝負のカウントが上がってしまいます.
23
26
 
24
27
  モロモロ想像・修正すると, 以下の様になりました.
25
28
  (遊びで日本語メソッド名を使いました. 問題ありましたらテキトウな英文字にしてください.)

3

コード例追加

2020/03/11 07:01

投稿

jimbe
jimbe

スコア13355

answer CHANGED
@@ -1,6 +1,25 @@
1
1
  まず, 長すぎです.
2
2
  ご質問の件は, 条件を並べ過ぎてどの場合にどれが表示されるのかが分からなくなっているためと思います.
3
+ 例えば ```switch(pry2) { ~ }``` の部分は
4
+ ```java
5
+ if(pry2 < 0 || com2.length < pry2) {
6
+ System.out.println("範囲外の数字です。0~3で入力してね。");
7
+ } else {
3
- pry == 0 で com == 0 の場合は... の羅列をよく見る, pry == com の場合は... とすれば纏められたりします.
8
+ System.out.println(com2[cpu2] + "(COM)" + "(Player)" + com2[pry2] + "だね");
9
+ if (pry2 == cpu2) {
10
+ if(hantei == 1) {
11
+ System.out.println("あなたの勝ち!");
12
+ return 1;
13
+ }else if(hantei == 2) {
14
+ System.out.println("あなたの負け!");
15
+ return 0;
16
+ }
17
+ } else {
18
+ System.out.println("\nもう一度じゃんけんからだよ!");
19
+ }
20
+ }
21
+ ```
22
+ と纏まります.
4
23
 
5
24
  モロモロ想像・修正すると, 以下の様になりました.
6
25
  (遊びで日本語メソッド名を使いました. 問題ありましたらテキトウな英文字にしてください.)

2

再修正(まだメッセージの流れが変ですが...)

2020/03/11 06:05

投稿

jimbe
jimbe

スコア13355

answer CHANGED
@@ -35,6 +35,10 @@
35
35
  }
36
36
  }
37
37
 
38
+ enum Settlement {
39
+ NOT_SETTLED, WON, LOST
40
+ }
41
+
38
42
  public class test32 {
39
43
  public static void main(String[] args) {
40
44
  Player player = new Player();
@@ -46,8 +50,11 @@
46
50
 
47
51
  for(int i=1; i<=game; i++) {
48
52
  System.out.println("\n---- " + i + "回戦 ----");
53
+ Settlement settlement;
54
+ do {
49
- if(あっちむいてホイ(player, computer, じゃんけん(player, computer))) win++;
55
+ settlement = あっちむいてホイ(player, computer, じゃんけん(player, computer));
50
- if(i != game) System.out.println("\nもう一度じゃんけんからだよ!");
56
+ } while(settlement == Settlement.NOT_SETTLED);
57
+ if(settlement == Settlement.WON) win++;
51
58
  }
52
59
 
53
60
  System.out.println("\n---- 終了 ----");
@@ -71,7 +78,7 @@
71
78
  }
72
79
  }
73
80
 
74
- private static boolean あっちむいてホイ(Player player, Computer computer, boolean playerAttack) {
81
+ private static Settlement あっちむいてホイ(Player player, Computer computer, boolean playerAttack) {
75
82
  String[] dirStr = new String[] {"上", "下", "左", "右"};
76
83
 
77
84
  System.out.println("\n次はあっちむいてホイ!です\nあなたは"+(playerAttack?"攻撃側":"防御側")+"です\n数字で入力してね");
@@ -80,7 +87,11 @@
80
87
  int cpu = computer.select(dirStr);
81
88
  System.out.println(dirStr[cpu] + "(COM)と" + "(Player)" + dirStr[pry] +"だね");
82
89
 
90
+ if(pry != cpu) {
91
+ System.out.println("もう一度じゃんけんからだよ!");
92
+ return Settlement.NOT_SETTLED;
93
+ }
83
- return printResult(playerAttack ? pry == cpu : pry != cpu);
94
+ return printResult(playerAttack) ? Settlement.WON : Settlement.LOST;
84
95
  }
85
96
 
86
97
  private static boolean printResult(boolean result) {

1

「あっちむいてほい」のルールを忘れてましたので修正

2020/03/11 05:50

投稿

jimbe
jimbe

スコア13355

answer CHANGED
@@ -46,9 +46,7 @@
46
46
 
47
47
  for(int i=1; i<=game; i++) {
48
48
  System.out.println("\n---- " + i + "回戦 ----");
49
- boolean win1 = じゃんけん(player, computer);
49
+ if(あっちむいてホイ(player, computer, じゃんけん(player, computer))) win++;
50
- boolean win2 = あっちむいてホイ(player, computer);
51
- if(win1 && win2) win++;
52
50
  if(i != game) System.out.println("\nもう一度じゃんけんからだよ!");
53
51
  }
54
52
 
@@ -73,16 +71,16 @@
73
71
  }
74
72
  }
75
73
 
76
- private static boolean あっちむいてホイ(Player player, Computer computer) {
74
+ private static boolean あっちむいてホイ(Player player, Computer computer, boolean playerAttack) {
77
75
  String[] dirStr = new String[] {"上", "下", "左", "右"};
78
76
 
79
- System.out.println("\n次はあっちむいてホイ!です\n数字で入力してね");
77
+ System.out.println("\n次はあっちむいてホイ!です\nあなたは"+(playerAttack?"攻撃側":"防御側")+"です\n数字で入力してね");
80
78
 
81
79
  int pry = player.select(dirStr, "始めるよ! あっちむいてホイ : ");
82
80
  int cpu = computer.select(dirStr);
83
81
  System.out.println(dirStr[cpu] + "(COM)と" + "(Player)" + dirStr[pry] +"だね");
84
82
 
85
- return printResult(pry != cpu);
83
+ return printResult(playerAttack ? pry == cpu : pry != cpu);
86
84
  }
87
85
 
88
86
  private static boolean printResult(boolean result) {