目前不明白下面代码中,为什么去掉图中所示的sc.nextLine();这一行;运行程序的时候,输入1后,就会直接不等你输入图书名称,就直接打印图书不存在了,如下图所示,请问这里的SC.nextLine()在这里有什么用?
下面是完整代码
package p1to9;
import java.util.InputMismatchException;
import java.util.Scanner;
public class LibrarySystem {
// 图书馆现有书目
private String[] books = {"高数","大物","英语"};
// 按序号查找图书
public void findABook( int num ){
try{
System.out.println("book:" + books[num]);
}catch (InputMismatchException e){
System.out.println("9999命令输入错误!请根据提示输入数字命令!");
}
catch (ArrayIndexOutOfBoundsException e){
System.out.println("图书不存在!");
}
}
// 按书名查找图书
public boolean findABook( String bookName ){
for( String book:books){
if(book.equalsIgnoreCase(bookName)){
System.out.println("book:" + book);
return true;
}
}
System.out.println("图书不存在!");
return false;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
LibrarySystem ls = new LibrarySystem();
Scanner sc = new Scanner(System.in);
while(sc != null){ //这里用while而不用if,是因为while可以多次调用,而if则只调用一次
System.out.println("输入命令:1-按照名称查找图书;2-按照序号查找图书。");
try{
int commandNum = sc.nextInt();
sc.nextLine();//是Scanner中的一个方法,表示获取键盘输入的一整行,包括空格
switch (commandNum) {
case 1:
System.out.println("输入图书名称:");
String bookName = sc.nextLine();
ls.findABook(bookName);
break;
case 2:
System.out.println("输入图书序号:");
int bookNum = sc.nextInt();
sc.nextLine();
ls.findABook(bookNum);
break;
default:
//输入整数范围有误,抛出异常
throw new Exception("088888命令输入错误!请根据提示输入数字命令!");
}
}catch(InputMismatchException e){
System.out.println("33333333命令输入错误!请根据提示输入数字命令!");
sc.nextLine();
}catch (Exception e){
//e.printStackTrace();
System.out.println("2222222命令输入错误!请根据提示输入数字命令!");
}
}
}
}