Java 使用try-and-catch时,代码仍会崩溃

Java 使用try-and-catch时,代码仍会崩溃,java,crash,try-catch,Java,Crash,Try Catch,当我调试这段代码时,它正是我想要的。但是当我运行它时,它不允许我执行s.nextboolean(s是scanner(java.util.scanner)的对象),我使用它来获取输入。如果异常发生时打印出来,会发生什么情况?你真的想出来吗?写True或False,但它会打印异常并使代码崩溃。它不允许我键入True或False,它只是在代码中当它要求一个int,而你给它一个应该出现的字符串时使它崩溃,所以它给出了一个不匹配的异常。这是一个bug(我在使用intellij)让我们假设您键入“FRED”

当我调试这段代码时,它正是我想要的。但是当我运行它时,它不允许我执行s.nextboolean(s是scanner(java.util.scanner)的对象),我使用它来获取输入。如果异常发生时打印出来,会发生什么情况?你真的想出来吗?写True或False,但它会打印异常并使代码崩溃。它不允许我键入True或False,它只是在代码中当它要求一个int,而你给它一个应该出现的字符串时使它崩溃,所以它给出了一个不匹配的异常。这是一个bug(我在使用intellij)

让我们假设您键入“FRED”作为整数值,然后按Enter键。您的输入流如下所示:

F
R
E
D
\n

s.nextInt()
发现输入流中的第一个字符不是整数,因此它抛出一个
inputmaschException
,并且不使用任何字符。因此,您的输入流仍然如下所示:

F
R
E
D
\n

调用
s.nextBoolean()
,再次引发
inputmaschException
。这一次,您不在
try{…}
块内(您在catch块内),因此异常会向上传播并终止程序

相反,您必须通过调用
s.nextLine()
之类的函数来清除输入流中的错误输入

此时,错误输入已被使用,用户可以键入“True”,该值由
s.nextBoolean()调用使用。
调用:


F R E D\n
T
R
u
E
\n

当你得到一个无效的输入时,你不是在使用它,例如
nextLine()
所以当你尝试
nextBoolean()
时,你仍然在试图读取无效的输入。@PeterLawrey我也是这么想的@artechhelp,所以只需在
nextBoolean()
之前添加
nextLine()
。谢谢。我以为如果你想输入一个字符串,nextline就应该这样做?是的,但是使用像
nextline()
nextBoolean()
这样的方法不会像
nextline()
那样使用换行符(
\n
)。我经常使用
nextLine()
读入我的所有值,并对它们进行解析,这样我就不必担心这个问题。
    try
        {
             n = s.nextLine();
             a = s.nextInt();
        }
        catch(Exception e)
        {
            System.out.println("do u really want to come out? Write True or False");
            boolean c = s.nextBoolean();
            }
catch (Exception e) {
   s.nextLine();  // Consume the current line of bad input
   System.out.println("Write True or False");
   boolean c = s.nextBoolean();
}