scanner中InputMisMatchException处理

我们知道在使用scanner进行控制台输入时候,使用next()方法输出,但是这种方法存在弊端,比如你使用nextInt()方法,但是输入一个字符串类型,就会抛出InputMisMatchException异常。

首先来看一下scanner在jdk中的一些方法:

 

String next()
查找并返回来自此扫描器的下一个完整标记。
String next(Pattern pattern)
如果下一个标记与指定模式匹配,则返回下一个标记。
String next(String pattern)
如果下一个标记与从指定字符串构造的模式匹配,则返回下一个标记。
BigDecimal nextBigDecimal()
将输入信息的下一个标记扫描为一个 BigDecimal
BigInteger nextBigInteger()
将输入信息的下一个标记扫描为一个 BigInteger
BigInteger nextBigInteger(int radix)
将输入信息的下一个标记扫描为一个 BigInteger
boolean nextBoolean()
扫描解释为一个布尔值的输入标记并返回该值。
byte nextByte()
将输入信息的下一个标记扫描为一个 byte。
byte nextByte(int radix)
将输入信息的下一个标记扫描为一个 byte。
double nextDouble()
将输入信息的下一个标记扫描为一个 double。
float nextFloat()
将输入信息的下一个标记扫描为一个 float。
int nextInt()
将输入信息的下一个标记扫描为一个 int。
int nextInt(int radix)
将输入信息的下一个标记扫描为一个 int。
String nextLine()
此扫描器执行当前行,并返回跳过的输入信息。
long nextLong()
将输入信息的下一个标记扫描为一个 long。
long nextLong(int radix)
将输入信息的下一个标记扫描为一个 long。
short nextShort()
将输入信息的下一个标记扫描为一个 short。
short nextShort(int radix)
将输入信息的下一个标记扫描为一个 short。

我们可以看到基本上每种类型的数据都有对应的方法,如果控制台输入的与你设置的不匹配,就会出现异常。

Scanner sc=new Scanner(System.in);

System.out.println("向控制台输入一个整数类型的数据");

sc.nextInt();

拿上面这个来举例说明,当你在控制台输入时,虽然有提示让用户输入整数类型的数据,但是用户万一输入其他的类型就会抛出异常,这就违反了java的健壮性,因为一点小错误,就导致整个系统都停止了,所以我们需要通过异常处理来解决,那么怎么解决呢

思路:利用try-catch捕获异常,每次输入不匹配的时候我们就抛出一个提示,让其重新输入,直到输入正确的数据类型为止。

import java.util.Scanner;

public class scannerTest {
		 
	    static Scanner input = new Scanner(System.in);
	 
	    public static void main(String[] args) {
	        while (true) {//设置一个死循环
	            try {
	                acceptPrint();//当输入正确数据后,执行break语句,跳出循环
	                break;
	            } catch (Exception e) {	  
	                input = new Scanner(System.in);
	            }
	        }
	    }
	 
	    public static void acceptPrint() {
	        System.out.println("请输入一个整数:");
	        int temp = input.nextInt();
	        System.out.println(temp);
	    }
	}

scanner中InputMisMatchException处理_第1张图片

我们运行后发现,如果你输入的不是int型的,就会一直提示让你输入,直到输入正确为止。

 

你可能感兴趣的:(实训)