Java中的InputMismatchException和解析

时间:2020-01-09 10:34:58  来源:igfitidea点击:

在这篇文章中,我们将讨论java.util.InputMismatchException及其修复方法。当我们尝试通过Scanner类实例读取令牌并且检索到的输入与预期类型的模式不匹配时,将引发InputMismatchException。

Java中的InputMismatchException

Java中的Scanner类可用于从File,InputStream,Path或者String读取输入。扫描程序使用定界符模式将其输入分为令牌,默认情况下,该模式与空格匹配。然后,可以使用各种下一种方法将这些标记转换为不同类型的值。例如,Scanner类中用于读取相应数据类型的下一个输入的某些next方法是nextLong(),nextBoolean(),nextByte(),nextDouble(),nextFloat(),nextInt()。

当我们使用下一类方法之一的Scanner类读取输入但传递的输入类型与用于获取输入的下一种方法不匹配时,则会抛出InputMismatchException。如果输入超出范围,也会引发此异常。例如,如果传递的输入为String类型,并且我们尝试使用nextInt()方法读取它,则将引发InputMismatchException。

Java InputMismatchException示例

在示例中,我们从用户处获取输入,然后显示所传递的整数是偶数还是奇数。扫描程序类用于接受用户输入。

import java.util.Scanner;

public class InputMismatchExp {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter a number: ");
    int i = sc.nextInt();
    if(i%2 == 0) {
      System.out.println("Entered number is even");
    }else {
      System.out.println("Entered number is odd");
    }
  }
}

现在,如果我们将输入作为其他任何类型(如String)传递,则将抛出InputMismatchException。

Enter a number: 
Two
Exception in thread "main" java.util.InputMismatchException
	at java.base/java.util.Scanner.throwFor(Scanner.java:939)
	at java.base/java.util.Scanner.next(Scanner.java:1594)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
	at com.theitroad.programs.InputMismatchExp.main(InputMismatchExp.java:10)

如何解决InputMismatchException

处理InputMismatchException的唯一方法是确保传递的输入值是兼容类型。