2

Java でプログラマーが定義したメソッドを使用して、単純なサイコロを振るゲームに取り組んでいます。プログラムを少なくとも 1 回実行してから、プレーヤーにもう一度実行するかどうかを尋ねる必要があることがわかっているので、do/while ループを使用することにしました。これまで使用する必要はありませんでしたが、正しく設定したと思います。

私のコードは次のとおりです。ループ内に含まれるメイン メソッドの本体と、プログラマが定義したメソッドは除きます。

do {
    // main METHOD BODY ..

    String proceed = ui.nextLine();
    System.out.print("Would you like to play again (yes/no)? ");

} while (proceed.charAt(0) == 'Y' || proceed.charAt(0) == 'y');

この時点で Eclipse IDE から得られるのは、「続行できません」というメッセージです。

何が起こっているかについてのアイデアはありますか?

4

3 に答える 3

6

の外で宣言する必要がありdoます。

String proceed = null;
do {
  ...    
  proceed = ui.nextLine(); 
  ...    
} while (proceed.charAt(0) == 'Y' || proceed.charAt(0) == 'y'); 

内で宣言するとdo、そのスコープはそのステートメントの本体内にのみあり、そのwhile部分で解決することはできません。

于 2011-11-20T03:14:22.110 に答える
6

proceed は、while ループで逆参照されている時点ではスコープ内にありません。進行変数の宣言を do の外に移動します。

String proceed;
do{

 main METHOD BODY

    proceed = ui.nextLine();
    System.out.print("Would you like to play again (yes/no)? ");

} while (proceed.charAt(0) == 'Y' || proceed.charAt(0) == 'y');
于 2011-11-20T03:14:51.453 に答える
0

これを最初に null に設定して後で値を指定するよりも、その値を単に「N」に定義する方がよいため、やって来た別のコーダーが null に関連付けられた動作を示唆せず、それに応じて行動することはありません。この値は 2 つのうちの 1 つである必要があります... Y または N。2 つの意図した値以外に初期化しないでください。

そこのメソッドを使用して、 while 条件を少しきれいに変更することもできます。やりたいことをより説明し、条件を単体テストできます。

次のような変更を加えた場合:

String proceed="N";
while (this.playAgain(proceed)) { //playAgain performs the same test as you have in your while
     //your code
}

第二に、意図的に切り取られたコードで、次のようなもので構成されていることを確認してください。

Game game = new Game();
game.play();

それよりも多くのコードがある場合は、1 つの場所に多すぎます。

于 2011-11-20T03:51:24.170 に答える