如何重新引用无效的布尔输入(java)

时间:2014-11-18 00:39:14

标签: java boolean

当我运行程序时,如果我键入“true”或“false”以外的内容,则会抛出InputMismatchException。

do {
            System.out.print("Do passengers have an individual tv screen?"
                    + "(true OR false): ");
            hasVideo = keyboard.nextBoolean();
            bus.setIndividualVideo(hasVideo);
            } while (!(hasVideo == true) && !(hasVideo == false));

3 个答案:

答案 0 :(得分:2)

抓住错误并将其视为无效回复......

try {
    System.out.print("Do passengers have an individual tv screen?"
                + "(true OR false): ");
    hasVideo = keyboard.nextBoolean();
} catch (InputMismatchException exp) {
    System.err.println("Please, enter only true or false");
}

请查看The try Block了解详情

答案 1 :(得分:1)

啊哈,是时候了解Exception处理了!您在Java崩溃时看到的任何Exception类型实际上都可以使用try-catch块在程序中捕获。

try {
    // code that might throw exceptions 1
    // code that might throw exceptions 2
} catch (Exception e) {
    // do something to fix the error
}

如果try{ }部分中的任何代码确实抛出Exception,则立即跳转到catch( ) { }部分,跳过try{ }部分中的任何其他语句{1}}。

try-catch的代码如下所示:

boolean loopAgain = false;
do {
    try {
        System.out.print("Do passengers have an individual tv screen?"
                + "(true OR false): ");
        hasVideo = keyboard.nextBoolean();
        bus.setIndividualVideo(hasVideo);

        loopAgain = false;

    } catch (InputMismatchException e) {
        System.err.println("Please, enter only true or false");
        loopAgain = true;
    }

} while (loopAgain);

修改:我从@ MadProgrammer的回答中借用了println("Please, enter only true or false");

答案 2 :(得分:0)

您必须提示用户输入布尔值。因为nextBoolean()可以抛出异常,所以最好的办法是将代码放在try / catch中。仅当输入除true或false之外的任何内容时,才会执行catch块代码。您可以添加while()do/while()循环以告知用户再次尝试。但是,catch块中最重要的事情是刷新输入流。请记住,即使存在异常,流仍然包含其中的内容。必须在再次使用前正确使用。下面的代码应该完全符合您的要求:

public static void main(String[] args)
{
    Scanner input = new Scanner(System.in);
    Boolean answer = null;
    do
    {
        System.out.println("Enter either true or false");
        try
        {
            answer = input.nextBoolean();
        }
        catch(InputMismatchException e)
        {
            System.out.println("ERROR: The input provided is not a valid boolean value. Try again...");
            input.next(); // flush the stream
        }
    } while(answer == null);
    input.close();
}