ybdt1201 2016-07-23 15:36 采纳率: 100%
浏览 969
已采纳

关于java的问题,求助大虾帮忙

目前不明白下面代码中,为什么去掉图中所示的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命令输入错误!请根据提示输入数字命令!");
            }
        }
    }
}
  • 写回答

4条回答 默认 最新

  • threenewbee 2016-07-23 15:42
    关注

    nextint只读取那个数字,此后敲下的回车不会算在内。如果你不调用nextLine一次,那么获取图书的书名就是空的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛