1

このJavaプログラムでは、ユーザーは1から100までの数字を推測することになっています。次に、を押すSと、試行の要約が表示されます。問題は、入力文字列を取得して数値に変換し、範囲と比較できるようにすることですが、その文字列をメニュー入力として使用できる必要もあります。更新ユーザーが正しく推測した後、プログラムをメニューオプションに戻すにはどうすればよいですか。したがって、ユーザーが勝った後、Sを使用してアクセスできる要約レポートを問題に表示したいと思います。

これが私のコードです

public class GuessingGame {
  public static void main(String[] args) {


    // Display list of commands
                System.out.println("*************************");
                System.out.println("The Guessing Game-inator");
                System.out.println("*************************");  
                System.out.println("Your opponent has guessed a number!");
                System.out.println("Enter a NUMBER at the prompt to guess.");
                System.out.println("Enter [S] at the prompt to display the summary report.");
                System.out.println("Enter [Q] at the prompt to Quit.");
                System.out.print("> ");


    // Read and execute commands
    while (true) {

      // Prompt user to enter a command
      SimpleIO.prompt("Enter command (NUMBER, S, or Q): ");
      String command = SimpleIO.readLine().trim();

      // Determine whether command is "E", "S", "Q", or
      // illegal; execute command if legal.
      int tries = 0;
      int round = 0;
      int randomInt = 0;
      int number = Integer.parseInt(command);
      if (number >= 0 && number <= 100) {
        if(randomInt == number){

                System.out.println("Congratulations! You have guessed correctly." +
                                " Summary below");
                round++;
        }
        else if(randomInt < number)
        {
                System.out.println("your guess is TOO HIGH. Guess again or enter Q to Quit");
                tries++;
        }      
        else if(randomInt > number){
                System.out.println("your guess is TOO LOW. Guess again or enter Q to Quit");
                tries++;
        }

      } else if (command.equalsIgnoreCase("s")) {
         // System.out.println("Round        Guesses");
         // System.out.println("-------------------------");
        //  System.out.println(round + "" + tries);



      } else if (command.equalsIgnoreCase("q")) {
        // Command is "q". Terminate program.
        return;

      } else {
        // Command is illegal. Display error message.
        System.out.println("Command was not recognized; " +
                           "please enter only E, S, or q.");
      }

      System.out.println();
    }
  }
}
4

4 に答える 4

1

文字列が整数であるかどうかを確認するには、文字列を整数として解析してみてください。例外がスローされた場合は、整数ではありません。

見る:

http://bytes.com/topic/java/answers/541928-check-if-input-integer

String input = ....
try {
    int x = Integer.parseInt(input);
    System.out.println(x);
}
catch(NumberFormatException nFE) {
    System.out.println("Not an Integer");
}
于 2013-03-23T20:50:37.763 に答える
1

最初にS/Q値を確認してから、文字列を整数に解析する必要があります。NumberFormatException(によってスローされるInteger.parseInt())をキャッチすると、入力が有効な値であるかどうかを判断できます。私はそのようなことをします:

if ("s".equalsIgnoreCase(command)) {
    // Print summary
} else if ("q".equalsIgnoreCase(command)) {
    // Command is "q". Terminate program.
    return;
} else {
    try {
        Integer number = Integer.parseInt(command);
        if(number < 0 || number > 100){
            System.out.println("Please provide a value between 0 and 100");
        } else if(randomInt == number){
            System.out.println("Congratulations! You have guessed correctly." +
                        " Summary below");
            round++;
        } else if(randomInt < number) {
            System.out.println("your guess is TOO HIGH. Guess again or enter Q to Quit");
                 tries++;
        } else if(randomInt > number) {
            System.out.println("your guess is TOO LOW. Guess again or enter Q to Quit");
            tries++;
        }
    } catch (NumberFormatException nfe) {
        // Command is illegal. Display error message.
        System.out.println("Command was not recognized; " +
                       "please enter only a number, S, or q.");
    }
}

このアルゴリズムを使用すると(最適化できると確信しています)、次のような場合に対処します。

  • ユーザーがs/Sを入力します
  • ユーザーがq/Qを入力します
  • ユーザーが無効な値(数値ではない)を入力しました
  • ユーザーが無効な番号を入力しました(0未満または100より大きい)
  • ユーザーが有効な番号を入力します
于 2013-03-23T21:08:12.070 に答える
0

Integer.parseInt(command)は、文字列が無効な場合にNumberFormatExceptionを返します。ユーザーがint値に解析できない「S」または「E」を入力した場合、コードで可能です。

コードを変更しました。このコードを確認してください:

 while (true) {

          // Prompt user to enter a command
          SimpleIO.prompt("Enter command (NUMBER, S, or Q): ");
          String command = SimpleIO.readLine().trim();

          // Determine whether command is "E", "S", "Q", or
          // illegal; execute command if legal.
          int tries = 0;
          int round = 0;
          int randomInt = 0;
          if(!command.equals("S") && !command.equals("E")) {
            // Only then parse the command to string  

          int number = Integer.parseInt(command);
          if (number >= 0 && number <= 100) {
            if(randomInt == number){
于 2013-03-23T20:51:09.527 に答える
0

エスケープシーケンス(SまたはQ)かどうかを確認Stringする前に、着信をに変換しようとしています。int

ステートメントを再配置して、if最初にSとQをチェックしてから、値をに変換してみてくださいint

Integer.parseIntまた、呼び出し(後続の信頼できるコード)をブロックでラップすることをお勧めしますtry-catch。これにより、ユーザーがint以外のものを入力した場合に、エラーステートメントをユーザーに提供できます。

于 2013-03-23T20:51:10.953 に答える