###前提・実現したいこと
java初心者です。
練習としてカードゲームのハイアンドローのプログラムを組んでいるのですが下記のような状況になりモヤモヤしています。
全体的にかなり疎いコードでかつ、まだまだ未完成なので見づらい部分ばかりだとは思いますがどなたかご教授して頂けると幸いです。
下記問題以外にもハイアンドローを組む上でもっと効率的に組める方法やアイディア等気になる点が御座いましたら、是非とも伺いたいです。
###発生している問題・エラーメッセージ
問題自体は解決しています。
「proccess03」での「proccess04(bet,card,select);」を呼び出すポイントについて疑問があります。
問題発生当初「proccess04」の呼び出しをソースコード内に「// ※※問題発生箇所※※ //」とコメントしてある場所に書いていたのですが、その場合間違った入力がされて「proccess03」をやり直した数だけ(else分岐ルートを通った回数)、「proccess04」が繰り返されてしまいました。
その際に「int card」の乱数発生が毎回行われ違う数値になるのはもちろん、「String select」も間違った物を全種類引き継いだまま複数回繰り返されていて、単純にどうしてそのような処理になるのか分からず詰まっていました。
結果として、「proccess03」でif分岐ルートを通った際にif文の中で「proccess04」を呼び出しする事で上記の問題は起こらなくなったのですが、そもそもなぜ間違っていたのかが分からない為、当然、思い通りに動くようになった理由も分からない状態のままになっています。
かなり漠然とした質問になってしまっているのですが、理由を知りたくて質問させて頂きました。
###ソースコード
java
1public class highandlow{ 2 public static void main(String[] args){ 3 System.out.println("Welcome."); 4 System.out.println("Could you tell me your name?"); 5 String name = new java.util.Scanner(System.in).nextLine(); 6 proccess01(name); 7 // ここで名前と掛け金の入力 // 8 } 9 public static void proccess01(String name){ 10 System.out.println("Ok," + name + ".Bet please."); 11 int bet = new java.util.Scanner(System.in).nextInt(); 12 proccess02(bet); 13 // この掛け金を後にproccess05で使う為 // 14 // ここから下のmethodで全て引き継ぎ (もっとスマートに出来る?)// 15 } 16 public static void proccess02(int bet){ 17 System.out.println("Draw."); 18 int card = new java.util.Random().nextInt(13) + 1; 19 System.out.println("The card is " + card); 20 proccess03(bet,card); 21 // カードドロー + 表示 // 22 } 23 public static void proccess03(int bet,int card){ 24 System.out.println("High or Low?"); 25 String select = new java.util.Scanner(System.in).nextLine(); 26 if ("high".equals(select) || "High".equals(select) || "low".equals(select) || "Low".equals(select)){ 27 System.out.println("Ok..."); 28 proccess04(bet,card,select); 29 }else{ 30 System.out.println("Wrong selecet.Please call in \"high / High / low/ Low\""); 31 proccess03(bet,card); 32 } 33 // ※※問題発生箇所※※ // 34 // ハイアンドローの選択、誤った選択の場合繰り返し // 35 } 36 public static void proccess04(int bet,int card,String select){ 37 System.out.println("Card is " + card + ".And you selected" + select + "."); 38 int newcard = new java.util.Random().nextInt(13) + 1; 39 System.out.println("Next card is....." + newcard +"!!"); 40 proccess05(bet,card,newcard,select); 41 // カードとハイアンドローの確認、その後カードドロー // 42 } 43 public static void proccess05(int bet,int card,int newcard,String select){ 44 if (card < newcard && "high".equals(select) || "High".equals(select)){ 45 System.out.println("win with high"); 46 bet = bet * 2; 47 System.out.println("now,you got" + bet); 48 }if (card > newcard && "low".equals(select) || "Low".equals(select)){ 49 System.out.println("win with low"); 50 bet = bet * 2; 51 System.out.println("now,you got" + bet); 52 }else{ 53 System.out.println("lose"); 54 bet = bet * 0; 55 System.out.println("now,your bet is gone right now ^v^"); 56 } 57 // 複合結果からの勝敗、それに伴った掛け金の増減 // 58 // 負けた場合proccess01へ // 59 // 勝った場合proccess02へ // 60 // ここで設定する繰り返し処理が上手くいかず詰み // 61 // newcardの値をcardへ代入したいのですが // 62 // proccess02ではcardの乱数発生があり // 63 // どう互換性を保つか分からない // 64 } 65}
###宜しくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/17 01:12
2015/11/17 16:20