Scanner
在java里获取用户输入的字符串
import java.util.Scanner;
Scanner sc=new Scanner(System.in);
一般的用法
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个同学的名字:");
String a=sc.next();
System.out.println("该同学的名字为:"+a);
}
这样的用法几乎不会出现错误,因为你可以给这个同学任意一个名字:123,aba等,但是看下面一个例子
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个分子:");
int a=sc.nextInt();
System.out.println("请输入一个分母:");
int b=sc.nextInt();
int c=a/b;
System.out.println("结果为:"+c);
}
正常的比如我输入一个分子为10,分母为2,则结果为5
但是如果我输入的分子为10,分母为0呢,又或者分子为a,分母 为b呢
第一个报了算术异常,代码被强制结束了
第二个则报了输入不匹配的异常,sc获得的类型是int类型,但是输入的是String,代码强制结束
异常
以上的两个例子都是异常,当然 ,你可以永远只输入int类型的数据,但是你不能保证你的程序给他人使用的时候也只是输入int类型的数据,如果他人输入的数据导致代码异常结束,这就说明这不是一段令人满意代码,要想写出令人满意的代码,我们就要进行异常处理
//异常处理
try{
异常代码块
}catch(异常类型 对象){
异常处理操作
}finally{
异常的统一出口
}
例子
//把有可能有异常的代码块写入方法A中
public void A(){
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个分子:");
int a=sc.nextInt();
System.out.println("请输入一个分母:");
int b=sc.nextInt();
int c=a/b;
System.out.println("结果为:"+c);
}
//写一个异常处理的方法B
public void B() {
try {
A();//调用有可能有异常的方法A
} catch (ArithmeticException e) {//判断是否有算术异常
System.out.println("算术异常");//输出语句
B();//再调用B方法
}catch(InputMismatchException e) {//判断是否有输入不匹配异常
System.out.println("输入不匹配异常");
B();//再调用B方法
}
}
在try里调用方法A,如果输入的分母为0,出现算术异常,输出“算术异常”,并且调用B方法(自己),再从头开始,如果输入的分子或分母为String类型,出现输入不匹配异常,输出“输入不匹配”,调用B方法,如果一直出现异常则一直调用B方法,调用B方法里又调用A方法,于是一直循环要求输入,直到不出现异常,代码运行结束
最终代码
import java.util.InputMismatchException;
import java.util.Scanner;
public class ExceptionDemo {
public static void main(String[] args) {
ExceptionDemo ed=new ExceptionDemo();
ed.B();
}
public void A(){
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个分子:");
int a=sc.nextInt();
System.out.println("请输入一个分母:");
int b=sc.nextInt();
int c=a/b;
System.out.println("结果为:"+c);
}
public void B() {
try {
A();
} catch (ArithmeticException e) {
System.out.println("算术异常");
B();
}catch(InputMismatchException e) {
System.out.println("输入不匹配异常");
B();
}
}
}