package jieshu;
import java.util.Scanner;
public class BookManger {
static Scanner scan=new Scanner(System.in);
public static void main(String[] args) {
// TODO 自动生成的方法存根
String book[]={"java","c语言","数据结构","操作系统","数据库","计算机网络"};//用来存储书名
while(true)
{
System.out.println("请输入1:用书名查找书籍,2:用下标查找书籍");
String book1;
try{
int in=input();
switch(in)
{
case 1:book1=getbookbyname(book);
System.out.println("找到的书籍为:"+book1);
break;
case 2:book1=getbookbynumber(book);
System.out.println("找到的书籍为:"+book1);
break;
case -1:
System.out.println("输入错误请重新输入数字!");
continue;
default:
System.out.println("输入错误!");
continue;
}
}
catch(Exception e)
{
System.out.println(e.getMessage());
continue;
}
}
}
private static String getbookbyname(String[] book) throws Exception{
// TODO 自动生成的方法存根
System.out.println("请输入名字");
String name=scan.next();
for(int i=0;i<book.length;i++)
{
if(name.equals(book[i]))
return book[i];
}
throw new Exception("图书不存在");
}
private static String getbookbynumber(String[] book) throws Exception{
// TODO 自动生成的方法存根
System.out.println("请输入下标");
try{int index=scan.nextInt();
for(int i=0;i<book.length;i++)
{
if(index==i)
return book[index];
}
}
catch(ArrayIndexOutOfBoundsException e)
{
Exception booknotexist=new Exception("图书不存在");
booknotexist.initCause(e);
throw booknotexist;
}
return null;
}
public static int input()
{
try
{
int in=scan.nextInt();
return in;
}
catch(Exception e)
{
System.out.println("请输入1或2的整数!");
return -1;
}
}
}
热门评论
只要出现异常就一直continue,没有被打断,在System.out.println("输入错误!");后应该是用break;打断这次循环操作
刚看了作业参考,定义成全局的也行,但是你需要在catch中 重新初始化一遍 scan = new Scanner(System.in)
不要用全局scanner,改成每次调用的时候,重新初始化。如果你用全局的,后面调用的话,因为一开始初始化过,让你输入了。所以里面有值,直接跳过,进入死循环。