输入错误的类型时,如何防止扫描仪抛出异常?

这是一些示例代码:

import java.util.Scanner;

class In

{

public static void main (String[]arg)

{

Scanner in = new Scanner (System.in) ;

System.out.println ("how many are invading?") ;

int a = in.nextInt() ;

System.out.println (a) ;

}

}

如果我运行该程序并将其设置为int like 4,则一切正常。

另一方面,如果我回答,too many那不会嘲笑我的有趣笑话。相反,我得到这个(如预期的那样):

Exception in thread "main" java.util.InputMismatchException

at java.util.Scanner.throwFor(Scanner.java:819)

at java.util.Scanner.next(Scanner.java:1431)

at java.util.Scanner.nextInt(Scanner.java:2040)

at java.util.Scanner.nextInt(Scanner.java:2000)

at In.main(In.java:9)

有没有一种方法可以使它忽略不是int的条目,或者用“有多少个入侵者”重新提示?我想知道这两种方法。

回答:

你可以使用的诸多一个hasNext*是方法Scanner有预验证。

    if (in.hasNextInt()) {

int a = in.nextInt() ;

System.out.println(a);

} else {

System.out.println("Sorry, couldn't understand you!");

}

这可以防止InputMismatchException从甚至被抛出,因为你总是确保它WILL你读它之前匹配。

  • boolean hasNextInt():返回true是否可以使用nextInt()方法将此扫描器输入中的下一个标记解释为默认基数中的int值。扫描仪不会越过任何输入。

  • String nextLine():使此扫描仪前进到当前行,并返回跳过的输入。

请记住以粗体显示的部分。hasNextInt()不会超过任何输入。如果返回true,你可以通过调用来推进扫描程序nextInt(),不会抛出异常InputMismatchException

如果返回false,则需要跳过“垃圾”。最简单的方法是调用nextLine(),可能两次,但至少一次。

为什么你可能需要做nextLine()两次以下操作:假设这是输入的内容:

42[enter]

too many![enter]

0[enter]

假设扫描仪位于该输入的开头。

  • hasNextInt()是真实的,nextInt()回报42;扫描仪现在位于第一个扫描仪之前[enter]
  • hasNextInt()为假,nextLine()返回一个空字符串,一秒钟nextLine()返回"too many!";扫描仪现在是刚过第二[enter]
  • hasNextInt()是真实的,nextInt()回报0;扫描仪现在在之前第三[enter]

    这是将其中一些内容放在一起的示例。你可以尝试使用它来研究其Scanner工作原理。

        Scanner in = new Scanner (System.in) ;

System.out.println("Age?");

while (!in.hasNextInt()) {

in.next(); // What happens if you use nextLine() instead?

}

int age = in.nextInt();

in.nextLine(); // What happens if you remove this statement?

System.out.println("Name?");

String name = in.nextLine();

System.out.format("[%s] is %d years old", name, age);

假设输入为:

He is probably close to 100 now...[enter]

Elvis, of course[enter]

然后输出的最后一行是:

[Elvis, of course] is 100 years old

以上是 输入错误的类型时,如何防止扫描仪抛出异常? 的全部内容, 来源链接: utcz.com/qa/400564.html

回到顶部