当我运行程序时,如果我键入“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));
答案 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();
}