Java源码-第一个异常处理小程序:整数除法

Java how to program(中文名:Java大学教程)第10版第11章:深入理解异常(Exception Handling: A Deeper Look)中给出了一个整数除法的示例,用户输入除数和被除数时,任何一个出错,就必须重新来过。考虑到这样做不太人性化,决定改写一下。

代码如下:

package exercise;

//Fig. 11.3: DivideByZeroWithExceptionHandling.java
//Handling ArithmeticExceptions and InputMismatchExceptions.
import java.util.InputMismatchException;
import java.util.Scanner;

public class FirstExceptionHandler
{
//demonstrates throwing an exception when a divide-by-zero occurs
public static int quotient(int numerator, int denominator)
 throws ArithmeticException
{
 return numerator / denominator; // possible division by zero
} 

public static void main(String[] args)
{
 Scanner scanner = new Scanner(System.in); 
 boolean continueLoop = true; // determines if more input is needed
 int numerator=0;
 int denominator=0;
 int result=0;

 do
 {
    try // 读取被除数(整数)
    {
       System.out.print("请输入被除数: ");
       numerator = scanner.nextInt();
       continueLoop = false; // 正确读取到被除数,跳出while循环
    }
    //如果用户输入不是整数,则抛出inputMismatchException(输入不匹配异常)
    catch (InputMismatchException inputMismatchException)
    {
       System.err.printf("%n发生异常:%s%n",
          inputMismatchException);
       System.out.printf(
               "输入非法,请输入一个整数:%n%n");
       scanner.nextLine(); // discard input so user can try again

        }
 } while (continueLoop); 
 
continueLoop = true;//重置循环标记
 do
 {
    try // 读取除数(非零整数)
    {
       System.out.print("请输入除数:");
       denominator = scanner.nextInt();
       result = quotient(numerator, denominator);
       System.out.printf("%n计算结果: %d除以%d = %d%n", numerator,
          denominator, result);
       continueLoop = false; // input successful; end looping
    }
    catch (InputMismatchException inputMismatchException)
    {
       System.err.printf("%n发生异常:%s%n",
          inputMismatchException);
       scanner.nextLine(); // discard input so user can try again
       System.out.printf(
               "输入非法,请输入一个整数:%n%n");
        }
    catch (ArithmeticException arithmeticException)
    {
       System.err.printf("%n发生异常:%s%n", arithmeticException);
       System.out.printf(
          "整数除法中,除数不能为零,请重新输入!%n%n");
    } 
 } while (continueLoop); 
} 
} // end class DivideByZeroWithExceptionHandling


运行结果:

请输入被除数: a

发生异常:java.util.InputMismatchException
输入非法,请输入一个整数:

请输入被除数: 11.1

发生异常:java.util.InputMismatchException
输入非法,请输入一个整数:

请输入被除数: 88
请输入除数:b

发生异常:java.util.InputMismatchException
输入非法,请输入一个整数:

请输入除数:0

发生异常:java.lang.ArithmeticException: / by zero
整数除法中,除数不能为零,请重新输入!

请输入除数:11

计算结果: 88除以11 = 8


参考:

原代码如下:

package example;

//Fig. 11.3: DivideByZeroWithExceptionHandling.java
//Handling ArithmeticExceptions and InputMismatchExceptions.
import java.util.InputMismatchException;
import java.util.Scanner;

public class DivideByZeroWithExceptionHandling
{
// demonstrates throwing an exception when a divide-by-zero occurs
public static int quotient(int numerator, int denominator)
   throws ArithmeticException
{
   return numerator / denominator; // possible division by zero
} 

public static void main(String[] args)
{
   Scanner scanner = new Scanner(System.in); 
   boolean continueLoop = true; // determines if more input is needed

   do
   {
      try // read two numbers and calculate quotient
      {
         System.out.print("Please enter an integer numerator: ");
         int numerator = scanner.nextInt();
         System.out.print("Please enter an integer denominator: ");
         int denominator = scanner.nextInt();

         int result = quotient(numerator, denominator);
         System.out.printf("%nResult: %d / %d = %d%n", numerator,
            denominator, result);
         continueLoop = false; // input successful; end looping
      }
      catch (InputMismatchException inputMismatchException)
      {
         System.err.printf("%nException: %s%n",
            inputMismatchException);
         scanner.nextLine(); // discard input so user can try again
         System.out.printf(
                 "You must enter integers. Please try again.%n%n");
          }
      catch (ArithmeticException arithmeticException)
      {
         System.err.printf("%nException: %s%n", arithmeticException);
         System.out.printf(
            "Zero is an invalid denominator. Please try again.%n%n");
      } 
   } while (continueLoop); 
} 
} // end class DivideByZeroWithExceptionHandling

备注:修改后虽然对用户更友好的同时,代码也变长了,突然理解了作者为什么没有写成我那样了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值