0

私はプロジェクト (ゲーム) に取り組んでおり、要件の 1 つは、範囲外 (1-8) のオプションを入力した場合、および文字を入力した場合に警告を表示することです。ユーザーが無効な番号を入力すると、メニューが表示され、希望するオプションを再度尋ねられます。文字を入力する場合、プログラムは整数を入力するように求め、再度入力を求める必要があります。これは私がこれまでに持っているものです。範囲外の数値を正しく識別し、メニューを呼び出します。また、文字 (無効な入力) を識別しますが、ユーザーが正しいオプションを入力できるように入力を開きます。両方の条件を確認するにはどうすればよいですか?

ありがとう、タイラー

            int userChoice = scnr.nextInt();//<-- use this variable
            if (userChoice.hasNextInt() == false)
            {
                System.out.println("Error: Menu selection must be an integer! Please try again:");
            }
            // Variable used for storing what the user's main menu choice
            if (0 > userChoice || userChoice > 8)
            {
                System.out.println("Error: Invalid Menu Selection.");
                System.out.println("");
                System.out.println("Available Actions:");
                System.out.println("(1) Print Market Prices");
                System.out.println("(2) Print Detailed Statistics");
                System.out.println("(3) Buy Some Sheep");
                System.out.println("(4) Buy a Guard Dog");
                System.out.println("(5) Sell a Sheep");
                System.out.println("(6) Sell a Guard Dog");
                System.out.println("(7) Enter Night Phase");
                System.out.println("(8) Quit");
                System.out.println("What would you like to do?");
                userChoice = scnr.nextInt();
            }
4

5 に答える 5

0

まず最初に、シーケンスに対して行われる修正があり、nextInt()呼び出さhasNextInt()れます。1 つ目は入力から値を読み取るために使用され、2 つ目は値の型が であるかどうかを確認するために使用されますint。したがってhasNext[Type]()、`next[Type] の後に呼び出す必要があります。

第 2 に、 sincenextInt()は を返すため、変数intに対して呼び出すのは正しくありません。hasNextInt()userChoice

まずこの2つを以下のように修正しましょう。

if (scnr.hasNextInt()) {
    int userChoice =  scnr.nextInt();
} else {
    // input is not an int
}

コードを修正して、有効な を取得しint、指示を出力して、無効な入力に対して再度入力を求めるようにしましょう。

Scanner scnr = new Scanner(System.in);

boolean incorrectInput = true;
int userChoice = -1;

while (incorrectInput) {

    if (scnr.hasNextInt()) {

        userChoice = scnr.nextInt();
        // Variable used for storing what the user's main menu choice

        if (0 >= userChoice || userChoice > 8) {
            System.out.println("Error: Invalid Menu Selection.");
            System.out.println("");
            System.out.println("Available Actions:");
            System.out.println("(1) Print Market Prices");
            System.out.println("(2) Print Detailed Statistics");
            System.out.println("(3) Buy Some Sheep");
            System.out.println("(4) Buy a Guard Dog");
            System.out.println("(5) Sell a Sheep");
            System.out.println("(6) Sell a Guard Dog");
            System.out.println("(7) Enter Night Phase");
            System.out.println("(8) Quit");
            System.out.println("What would you like to do?");

        } else {
            incorrectInput = false;
        }
    } else {
        scnr.next();
        System.out.println("Error: Menu selection must be an integer! Please try again:");
    }
}
System.out.println("userChoice = " + userChoice);
于 2013-11-06T05:32:38.070 に答える
0

hasNextInt()プリミティブのメソッドを使用してint、入力が整数かどうかを確認しています。代わりにこれを使用してください:

int userChoice ;
        try{
        userChoice =scnr.nextInt();//<-- use this variable
        }
        catch(InputMismatchException ime){
            System.out.println("Error: Menu selection must be an integer! Please try again:");
        }

同様に、if条件内でも同じロジックを使用します

于 2013-10-02T03:30:15.683 に答える
0
try{
   int userChoice = scnr.nextInt();
   if(userChoice > 0 && userChoice <9){
       // your logic
   }else{
       System.out.println("Invalid choice");
       showMenu();
   }

}catch(Exception e){
   System.out.println("Invalid choice");
   showMenu();
}

public void showMenu(){
     System.out.println("Available Actions:");
     System.out.println("(1) Print Market Prices");
     System.out.println("(2) Print Detailed Statistics");
     System.out.println("(3) Buy Some Sheep");
     System.out.println("(4) Buy a Guard Dog");
     System.out.println("(5) Sell a Sheep");
     System.out.println("(6) Sell a Guard Dog");
     System.out.println("(7) Enter Night Phase");
     System.out.println("(8) Quit");
     System.out.println("What would you like to do?");
}
于 2013-10-02T04:49:48.680 に答える
0

または、強力なApache Commons ValidatorIntegerValidatorを使用できます。

if (new IntegerValidator().isInRange(Integer value, int min, int max)) {
    // value is in range ...
}
于 2016-02-19T21:35:44.510 に答える