Scanner与异常处理

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();
		}
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值