input =new Scanner(System.in)在这的作用是什么?为什么删掉的话后面运行时会死循环,请求Java大神帮忙解答!

我在做一个简单的图书查找系统,图书好输入为非整型数据时抛出错误返回-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,逐句运行,找找问题。

https://blog.csdn.net/lhp210205/article/details/52062588?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight

这里做了一些解释,不知道能不到给到你帮助