-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,因此循环将提前终止。

如果要允许文本输入并对其进行响应,则需要逐行读取文本而不是数字,并解析读取的行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() 为真(有一个数字)才能运行。

我所做的是我通常将验证放在接收输入的位置:

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 回答