以前、Javaの勉強方針について質問した時はたくさんの方から助言をいただきました。ありがとうございました。
https://teratail.com/questions/13496
RPGゲームはまだ難しいと感じたので、コマンドラインで動作する簡単なゲーム作りをしています。
出題と答え合わせを行うメソッドを持つpersonクラスを定義して、簡単なクイズゲームを作りました。
*以下、コードを抜粋。
Java
1//メインクラス 2public static void main(String[] args){ 3//インスタンスの生成 4 person A=new person( ); 5 helper h=new helper( ); 6//値の初期化 7 int answer=0; 8 boolean value=true; 9//質問メソッドを実行する。数字の入力を受付け、5(ヒント)以外が入力されるまでループ。 10 do{ 11 A.question( ); 12 do{ 13 int answer=new java.util.Scanner(System.in).nextInt( ); 14 if(answer==5){ 15 h.hint( ); 16 } 17 }while(answer==5); 18//5以外が入力されたら、入力された数字をAオブジェクトの回答メソッドに引数として渡し、boolean型の変数で返す。正解するまで繰り返す。 19 A.response(answer); 20 boolean value=A.response(answer); 21 }while(value==false); 22} 23 24 25 26//出題者クラス 27public static class person{ 28 public void question( ){ 29 //画面上に4択問題を表示。 30 //5を入力すればヒントがもらえると表示。 31 } 32 public boolean response(int a){ 33 if(a==1){ 34 System.out.println("正解です。"); 35 return true; 36 }else{ 37 System.out.println("不正解です。やり直してください。"); 38 return false; 39 } 40 } 41} 42 43//helperクラスは画面にヒントを表示するヘルパーメソッドを持っています
自分の意図としては、
①数字の入力を受け付ける
②5なら画面上にヒントを表示し、もう一度数字の入力を受け付ける
③1が入力されたら(正解を表す)trueを返し、ループを抜け出す
④1以外が入力されたら(不正解を表す)falseを返し、繰り返す(ループ継続)
です。
当初は、answerやvalueをネストの深いところ(?)で宣言していたので、変数のスコープが狭くなり、値をうまく使えていなかったのですが、ループのブロックの外で宣言することで、ひとまず値は使えるようになりました。
しかし、実際に実行してみると、自分の意図したように動きません。
何がおかしいのでしょうか?
助言のほどよろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/24 08:08
2015/08/24 08:18
2015/08/24 13:09
2015/08/24 13:19
2015/08/24 13:32
2015/08/24 13:39
2015/08/24 15:28
2015/08/24 15:40
2015/08/24 15:57