• Scanner类nextInt方法的使用注意点


    一、先看一段正常的代码

    1. 一段用Scanner捕获键盘输入的代码:

    Scanner sc = new Scanner(System.in);
    // 先读取键盘输入的字符串
    System.out.println("input name :");
    String name = sc.nextLine();
    // 后读取键盘输入的int值
    System.out.println("input id :");
    int id = sc.nextInt();
    
    System.out.println("id = " + id + " name =[" + name + "]");
    System.out.println("execute finish !");

    2. 测试结果

    2.1 运行程序

    input name :
    lings //键盘输入
    input id :
    0 //键盘输入

    2.2 程序输出

    id = 0 name =[lings]
    execute finish !

    和预期一样。

    二、一个小变化,颠倒一下取值类型的顺序

    1. 一段改变了取值顺序的代码:

    Scanner sc = new Scanner(System.in);
    
    // 先读取键盘输入的int值
    System.out.println("input id :");
    int id = sc.nextInt();
    
    // 后读取键盘输入的字符串
    System.out.println("input name :");
    String name = sc.nextLine();
    
    System.out.println("id = " + id + " name =[" + name + "]");
    System.out.println("execute finish !");

    2. 测试结果

    2.1 运行程序

    input id :
    0 //键盘输入
    input name :

    2.2 程序输出

    id = 0 name =[]
    execute finish !

    咦?说好的阻塞呢?我还没输入字符串怎么就执行结束了???

    3. 原因如下:

    nextInt方法根据分隔符(回车,空格等)只取出输入的流中分割的第一部分并解析成Int,然后把后面的字节传递下去。
    所以,第二种情况键盘实际输入是“0+回车”,nextInt读出了“0”,并留下了“回车”,
    接着netxLine读到了一个“回车”,这是字符串的结束判定符啊,所以读到的字符串就是空字符串“”。

    4. 有点晕?继续测试:

    4.1 运行程序

    input id :
    0 lings //键盘输入
    input name :
    4.2 程序输出

    id = 0 name =[ lings] //注意空格
    execute finish !

    这下清楚了吗?

    三、使用注意事项

    需要从键盘输入多个参数,尽量把nextLine类型放前面,nextInt放后面,实在不行。

    nextInt后面要跟一个nextLine方法“消化”掉那个多余的字符串。

    1. 消化掉多余字符串的例子

    Scanner sc = new Scanner(System.in);
    
    System.out.println("input id :");
    int id = sc.nextInt();
    sc.nextLine();
    System.out.println("input name :");
    String name = sc.nextLine();
    
    System.out.println("id = " + id + " name =[" + name + "]");
    System.out.println("execute finish !");

    2. 测试结果

    2.1 运行程序
    input id :
    0
    input name :
    lings

    2.2 程序输出

    id = 0 name =[lings]
    execute finish !
  • 相关阅读:
    自考过后的总结——如何快乐学习?
    自考总结——数据库原理第三章
    机房收费系统——用户权限和功能分析
    SQL视频总结
    学生信息管理系统总结——数据库的访问方式
    学习信息管理系统总结——数据库的连接和访问(一)
    学生信息管理系统总结——student数据库中表关系分析
    Kafka-文件管理
    Kafka-分区分配规则
    Kafka-处理请求(生产请求、获取请求)
  • 原文地址:https://www.cnblogs.com/yoyotl/p/7457711.html
Copyright © 2020-2023  润新知