1、7-7 InputMismatchException异常
(InputMismatchException异常)编写一个程序,提示用户读取两个整数,然后显示它们的和。程序应该在输入不正确时提示用户再次读取数值。
输入格式:
输入多组两个数
输出格式:
输出两个数的和
输入样例:
1 3
2.0 3
3.0 4
4 5
输出样例:
sum = 4
Incorrect input: two integer is required
Incorrect input: two integer is required
sum = 9
代码:
import java.util.InputMismatchException;//首先导入相关异常类
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {//有输入就继续
try {//try部分内容就是正常输入和输出结果
int a = in.nextInt();
int b = in.nextInt();
System.out.println("sum = "+(a+b));
} catch (InputMismatchException e) {//当输入的数不符合try部分的格式时,就会捕捉这个异常,然后输出提示,这里并不一定是e,其他也可以
System.out.println("Incorrect input: two integer is required");
in.nextLine();// 清空输入的数字,类似于getchar();
}
}
}
}
重点是最后一句 in.nextLine();
当我们输入2.0
并按下回车键时,整个字符串"2.0\n"
(包括数字、小数点和换行符)被放入了Scanner
的输入缓冲区。然后,当您调用nextInt()
方法时,它尝试从缓冲区的开头解析出一个整数。由于"2.0"
不是有效的整数(因为它包含小数点),nextInt()
方法会抛出InputMismatchException
异常,并且不会从缓冲区中移除任何字符。
此时我们要使用sc.nextLine(),它会读取并返回输入缓冲区中直到下一个换行符(在这个例子中是\n
)之前的所有字符,包括换行符之前的字符(但不包括换行符本身作为返回的字符串的一部分)。但是,nextLine()
实际上会消耗掉换行符,这样下一次调用nextInt()
或其他输入方法时,就不会立即遇到未处理的换行符了。