Java循环输入格式错误捕获异常后,进入下一次循环的方法

Java循环输入格式错误捕获异常后,进入下一次循环的方法

用控制台实现个简单的计算器功能,想捕获处理用户输入格式异常时发现捕获一次后,只会无限循环打印该异常信息,因为每次循环执行的数据都是第一次输入的数据,所以一直报异常。
解决办法简而言之,就是把流放进循环里,每次都重新创建(有点浪费…)

原来写法

写的逻辑可能比较复杂了,因为练习时想多涉及些知识点…

public static void main(String[] args){
  ICalculatorImpl test=new ICalculatorImpl();
  Operate op=new Operate();
  Scanner sc=new Scanner(System.in); 
  //循环输入
  while(true) {
         System.out.println("请输入两个数字和一个运算符(示例:2333 + 666)");
      try {
          //根据用户输入设置N1值
          op.setN1(sc.nextDouble());
          //输入运算符
          String operator=sc.next();
          //根据用户输入设置N2值
          op.setN2(sc.nextDouble());
          //判断用户输入是否规范
          if(op.getN2()==0) {
           System.out.println("除数不可为0!!!");
          }
          else {
           //调用计算方法
           test.calcu(op.getN1(), op.getN2(), operator); 
           System.out.println("============================");
          }
      }catch(InputMismatchException e) {       
       System.out.println("Error:输入格式错误,请参考示例!");
       System.out.println("============================");
      }          
     }   
 }

把sc写在循环外是想节约资源的,但是输入格式错误后会一直无限循环报异常

解决方法

把sc写在循环里面就行了

public static void main(String[] args){
  ICalculatorImpl test=new ICalculatorImpl();

  //循环输入
  while(true) {
   Operate op=new Operate();
   Scanner sc=new Scanner(System.in); 
      System.out.println("请输入两个数字和一个运算符(示例:2333 + 666)");
      try {
       //根据用户输入设置N1值
          op.setN1(sc.nextDouble());
          //输入运算符
          String operator=sc.next();
          //根据用户输入设置N2值
          op.setN2(sc.nextDouble());
          //判断用户输入是否规范
          if(op.getN2()==0) {
           System.out.println("除数不可为0!!!");
          }
          else {
           //调用计算方法
           test.calcu(op.getN1(), op.getN2(), operator); 
           System.out.println("============================");
          }
      }catch(InputMismatchException e) {       
       System.out.println("Error:输入格式错误,请参考示例!");
       System.out.println("============================");
      }          
     }   
 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值