-2

基本的に、整数のみを入力できるように検証しようとしています。これは私が現時点で持っているものですが、文字を入力するswitchと、結果が空白のままになります。

整数以外が入力さdefaultれた場合にスイッチに移動するようにしたい。

どんな助けでも素晴らしいでしょう。ありがとう!

while(loop && kb.hasNextInt())
{   

    choice = kb.nextInt();
    switch(choice)
    {
    case 1 :
            language = "FRENCH";
            loop = false;
            break;
    case 2 : 
            language = "GERMAN";
            loop = false;
            break;
    case 3 :
            language = "SPANISH";
            loop = false;
            break;
    default :
            System.out.println("That is not a correct choice. Please try again!");
            break;

    }
}   
4

3 に答える 3

1

次の入力が整数でない場合、 は.hasNextInt()を返すfalseため、ループは早期に終了します。

テキスト入力を許可してそれに応答したい場合は、数字ではなくテキストを 1 行ずつ読み取り、読み取った行を で解析する必要がありますInteger.parseInt。行を解析できない場合は、NumberFormatException. あなたはそれをキャッチし、適切に処理することができます。

    while (loop && scanner.hasNextLine()) {
        String line = scanner.nextLine();
        try {
            choice = Integer.parseInt(line);
        } catch (NumberFormatException e) {
            System.out.println("That is not an integer. Please try again!");
            continue;
        }

        switch (choice) {
            case 1:
                language = "FRENCH";
                loop = false;
                break;
            case 2:
                language = "GERMAN";
                loop = false;
                break;
            case 3:
                language = "SPANISH";
                loop = false;
                break;
            default:
                System.out.println("That is not a correct choice. Please try again!");
                break;
        }
    }
于 2014-12-15T20:33:44.193 に答える
0

これは、手紙があなたwhile(loop && kb.hasNextInt())を にするからですfalse。ループ内にifステートメントを入れることをお勧めします。hasNextInt()while


例 (ステートメントwhileの代わりにループを使用して実際に数値を取得しようとする):if

while(loop)
{
    // validate int using while loop
    while(!kb.hasNextInt())                             
    {
        System.out.println("you must enter a number! ");
        kb.next();
    }

    choice = kb.nextInt();

    switch(choice)
    {
    case 1 :
            language = "FRENCH";
            loop = false;
            break;
    case 2 : 
            language = "GERMAN";
            loop = false;
            break;
    case 3 :
            language = "SPANISH";
            loop = false;
            break;
    }
}   

System.out.println("Thank You " + studentID + " you have been registered for " + language);
于 2014-12-15T20:27:01.387 に答える
0

このコードは、実行するために kb.hasNextInt() が true (数値がある) である必要があるため、ユーザーが数値を入力しなかった場合、開始する前に失敗します。

私がしていることは、通常、入力を受け取る場所に検証を配置することです。

int choice;
Boolean retry = null;
while(retry == null) {
    try{
        String input = scanner.nextLine();
        choice = Integer.parseInt(input);
        retry = false;
    }catch(NumberFormatException e){
        System.out.println("Please enter a number from 1 to 4.");
    }
}

switch(choice){
    case 1:
        // Do stuff
        break;
    case 2:
        // Do stuff
        break;
    case 3:
        // Do stuff
        break;
    case 4:
        // Do stuff
        break;
    default:
        System.out.println("Something went wrong!");
}
于 2014-12-15T20:44:01.840 に答える