继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

在while循环中的try-catch语句,输入类型不匹配后为何会陷入死循环?

慕函数1733451
关注TA
已关注
手记 1
粉丝 2
获赞 4
package 模拟借书系统;
import java.util.Scanner;
import java.util.InputMismatchException; 
public class rendBook {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
       String[] book={"语文","数学","英语","政治","历史","地理"};
       Scanner input=new Scanner(System.in);
       boolean x=true;
       do{
           System.out.println("请输入命令:1-按照名称查找图书;2-按照序号查找图书");
           try{
               int order=input.nextInt(); 
               if(order==1){
                   System.out.println("请输入图书名称:");
                   String s1=input.next();
                   System.out.println(s1);
                   for(int i=0;i<book.length;i++){
                       if(book[i].equals(s1)){
                           System.out.println("有这本书:"+book[i]);
                           break;
                       }    
                       if(i==book.length-1)
                           System.out.println("图书不存在!");
                   }

               }
               else{
                   System.out.println("请输入图书序号:");
                   int num=input.nextInt();
                   if(num>book.length){
                       System.out.println("图书不存在!");       
                   }
                   else{
                       System.out.println("有这本书:"+book[num-1]);
                   }
               }
             break;  
           }
           catch(InputMismatchException e){
            System.out.println("输入有误,请重新输入!");
           }   
       }while(x);

       }

}

运行情况:
请输入命令:1-按照名称查找图书;2-按照序号查找图书
输入:a //类型不匹配,抛出异常!
//就会陷入如下死循环,很明显再次循环时,程序只执行了catch语句,而没有执行try
输入有误,请重新输入!
请输入命令:1-按照名称查找图书;2-按照序号查找图书
输入有误,请重新输入!
请输入命令:1-按照名称查找图书;2-按照序号查找图书

求高手解答

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP

热门评论

是由于input是全局的,把Scanner sc = new Scanner(System.in);放在do后面就可以了,我的就是这样修正的,因为如果放在里面就会重新创建一个对象,上次输入的不规范字符就不会保存下来,那么就不会死循环了

小白瞎BB 高手无视

try在无异常的情况下,是不会触发catch的。(废话)

但是一旦触发了异常,try本身就再也不会执行了,try就默认触发异常,随后就直接执行catch(类似:一朝被蛇咬十年怕井绳)。在循环里触发了异常,就会不断发出错误的报告。


System.out.println("输入有误,请重新输入!");

break;

后面加个break;退出循环?

查看全部评论