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-按照序号查找图书
求高手解答
热门评论
是由于input是全局的,把Scanner sc = new Scanner(System.in);放在do后面就可以了,我的就是这样修正的,因为如果放在里面就会重新创建一个对象,上次输入的不规范字符就不会保存下来,那么就不会死循环了
小白瞎BB 高手无视
try在无异常的情况下,是不会触发catch的。(废话)
但是一旦触发了异常,try本身就再也不会执行了,try就默认触发异常,随后就直接执行catch(类似:一朝被蛇咬十年怕井绳)。在循环里触发了异常,就会不断发出错误的报告。
System.out.println("输入有误,请重新输入!");
break;
后面加个break;退出循环?