回答編集履歴

3

条件論理積/論理和演算子

2015/11/15 07:55

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -31,3 +31,25 @@
31
31
  mainメソッドで名前や掛け金を管理して、それを各メソッドに渡す、という構造にしたほうがいいです。
32
32
 
33
33
  また、入力した文字がhighかlowかを、大文字小文字を無視して判定したいのなら、`equalsIgnoreCase`という便利なメソッドがありますのでご検討ください。
34
+
35
+
36
+
37
+ ```java
38
+
39
+ if (card < newcard && "high".equals(select) || "High".equals(select))
40
+
41
+ ```
42
+
43
+ ここは大問題です。論理演算子&&や||は、左から順に計算されます。
44
+
45
+ 仮にcard < newcard か "high".equals(select)がfalseを返した場合、
46
+
47
+ `card < newcard && "high".equals(select)`全体としてfalseになります。
48
+
49
+ しかし、この後`false || "High".equals(select)`の評価になります。
50
+
51
+ ここで"High".equals(select)がtrueを返せば、このif文の中身はtrueとなります。
52
+
53
+ つまり、カードの如何にかかわらず、selectに"High"が入っていれば勝ちになるというコードになります。
54
+
55
+ 下のif文も同じです。つまり**"High"か"Low"と入力すれば必勝になってしまいます**。

2

equalsIgnoreCase

2015/11/15 07:55

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -29,3 +29,5 @@
29
29
  - process05:判定と払い戻し
30
30
 
31
31
  mainメソッドで名前や掛け金を管理して、それを各メソッドに渡す、という構造にしたほうがいいです。
32
+
33
+ また、入力した文字がhighかlowかを、大文字小文字を無視して判定したいのなら、`equalsIgnoreCase`という便利なメソッドがありますのでご検討ください。

1

ハイ&ローゲームについて

2015/11/15 07:28

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -9,3 +9,23 @@
9
9
  今、簡単のためにaとbの2段階で説明しましたが、いくつになってもこの原理は変わりません。
10
10
 
11
11
  つまり、elseの中で再帰した回数だけ、elseを抜けた後の処理が実行されるので、問題の現象が発生します。
12
+
13
+ ---
14
+
15
+
16
+
17
+ ハイ&ローのシステムですが、結局全部ひとつづきにしていて、メソッドに分割しているメリットが余りないように思います。メソッドに分割するなら、機能別に分けて、それぞれの機能をmainから呼び出す形のほうがわかりやすいかと思います。
18
+
19
+ つまり、
20
+
21
+ - process01:名前の入力
22
+
23
+ - process02:掛け金の入力
24
+
25
+ - process03:ハイかローかの選択
26
+
27
+ - process04:次のカードドロー
28
+
29
+ - process05:判定と払い戻し
30
+
31
+ mainメソッドで名前や掛け金を管理して、それを各メソッドに渡す、という構造にしたほうがいいです。