我在做一个简单的图书查找系统,图书好输入为非整型数据时抛出错误返回-1,然后执行下一步操作,如果是现在的代码不会出任何问题,但是删掉了42行代码后会执行死循环。不知道42行代码作用是什么,希望大神帮忙回答!无限感激!!!
package BookFind;
import java.util.Scanner;
class BookFind{
/*
* 简易图书查找系统
* 异常处理
*/
private static Scanner input=new Scanner(System.in);
public static void main(String[] ger) {
//定义数组
String[] books= {"Java","C#","PHP","JavaScript"};
while(true) {
System.out.println("请输入指令:1-按图书号查找;2-按图书名查找");
try {
String book;
switch(Command()) {
case 1:
book=getBookByNumber(books);
System.out.println("book:"+book);
break;
case 2:
book=getBookByName(books);
System.out.println("book:"+book);
break;
default:
System.out.println("输入错误!请输入正确指令!");
continue;
}
break;
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
}
}
}
//命令输入及图书号输入
private static int Command() {
try {
int command=input.nextInt();
return command;
} catch (Exception e) {
// TODO: handle exception
//如果输入为非整形数据,则抛出错误返回-1
input=new Scanner(System.in);
return -1;
}
}
//输入图书名查找图书
private static String getBookByName(String[] books) throws Exception{
System.out.println("输入图书名:");
String bookname=input.next();
for(int i=0;i<books.length;i++) {
if(bookname.equals(books[i])){
return books[i];
}
}
throw new Exception("图书不存在!");
}
//输入图书索引号查找图书
private static String getBookByNumber(String[] books) throws Exception{
while(true) {
System.out.println("输入图书号:");
//获取图书号
try{
int booknumber=Command();
if(booknumber==-1) {
System.out.println("输入错误!请输入阿拉伯数字!");
continue;
}
return books[booknumber];
}catch(ArrayIndexOutOfBoundsException e) {
Exception bookindexOut=new Exception("图书不存在!");
bookindexOut.initCause(e);
throw bookindexOut;
}
}
}
}
看你怎么调用的Command,input在哪里定义的。
因为input没有new而循环的话,可能是因为之前的input的实体Scanner的缓存区问题。
你去42行的位置打断点然后debug,逐句运行,找找问题。
这里做了一些解释,不知道能不到给到你帮助