A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 549208564 中级黑马   /  2015-12-29 13:59  /  1025 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

        public static void main(String[] args) {
                Scanner scanner = new Scanner(System.in);
               
                System.out.println("请输入年龄");
                int age=scanner.nextInt();
                System.out.println("请输入名字:");
                //会什么运行到这里就结束了,如果使用scanner.next()就不会这样
                String name = scanner.nextLine();
                System.out.println(name);
        }

4 个回复

倒序浏览
本帖最后由 唱一些温暖 于 2015-12-29 15:21 编辑

next() 每次取到一个间隔符前面的数据   如: 输入 a b c 取值应该是a,因为a后面有空格
nextLine() 每次取一个换行符前面的数据  如:输入 a b c 回车,取值 就是a b c

public static void main(String[] args) {
                Scanner scanner = new Scanner(System.in);
                System.out.println("请输入年龄");
                int age=scanner.nextInt();
        //比如输入年龄28,按下回车,其实应该是28\r
             //nextInt() 只读了间隔符\r前面的,回车符也算是间隔符。
             //nextLine()发现键盘录入的没被读的回车符\r即换行符,读掉了\r,\r前面是空的即""。
             //如果这里输入28 张三,即 28空格张三回车,那么name的值就是" 张三",即空格张三。
                System.out.println("请输入名字:");
                //这里其实应该是打印了""。
                String name = scanner.nextLine();
                System.out.println(name);
        //试验一下。
                System.out.println(name.equals(""));
}
回复 使用道具 举报
唱一些温暖 发表于 2015-12-29 15:12
next() 每次取到一个间隔符前面的数据   如: 输入 a b c 取值应该是a,因为a后面有空格
nextLine() 每次取 ...

也就是说,在nextInt读取完后,留下了/r分隔符,当执行到nextLine时,nextLine在底层发现有一个分隔符/r,就直接读取了/r分隔符,也可以理解为,nextLine误认为/r是用户输入的,是这样吗
回复 使用道具 举报
这是因为在int age=scanner.nextInt();你输入整数之后就结束了,你又输入了回车(\r\n换行符),而回车符又被String name = scanner.nextLine()读取到(nextLine()可以读取任意内容),一旦nextLine()读取到\r\n就表示结束了,也就是nextLine()什么都没输出

点评

谢谢,明白了  发表于 2015-12-31 01:18
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马