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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天ya~_琼楼 中级黑马   /  2013-11-15 17:07  /  1990 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 天ya~_琼楼 于 2013-11-15 20:25 编辑

import java.util.Scanner;
public class Welcome {
        public static void main(String[] args) {
                Scanner scan = new Scanner(System.in);

                System.out.print("请输入您的姓名:");
                String name=scan.nextLine();
            
                System.out.print("请输入您的年龄:");
            int age=scan.nextInt();
            
            System.out.print("请输入您的性别:");
        String sex=scan.nextLine();

        System.out.println("姓名:"+name);
        System.out.println("年龄:"+age);
        System.out.println("性别:"+sex);
        }
}
程序没运行完就跳转,输入姓名、年龄后,程序直接输出结果,没有性别
找了很久没找到原因,哪位大神帮下忙,谢谢!

QQ截图20131115170523.png (1.79 KB, 下载次数: 8)

QQ截图20131115170523.png

评分

参与人数 1技术分 +1 黑马币 +2 收起 理由
To + 1 + 2 很给力!

查看全部评分

8 个回复

倒序浏览
  1. public static void main(String[] args) {
  2.                 Scanner scan = new Scanner(System.in);

  3.                 System.out.print("请输入您的姓名:");
  4.                 String name = scan.nextLine();
  5.                 System.out.print("请输入您的性别:");
  6.                 String sex = scan.nextLine();
  7.                 System.out.print("请输入您的年龄:");
  8.                 int age = scan.nextInt();

  9.                 System.out.println("姓名:" + name);
  10.                 System.out.println("年龄:" + age);
  11.                 System.out.println("性别:" + sex);
  12.         }
复制代码
换一下顺序,就可以了!

希望对你有帮助!
回复 使用道具 举报
杨增坤 发表于 2013-11-15 17:13
换一下顺序,就可以了!

希望对你有帮助!

谢谢!问题解决了,我能问下我的问题出在哪了吗?
回复 使用道具 举报
这是由于scan.nextInt()这个方法的执行特点决定的。
因为你在输入完第二个数字以后,按了一下回车。
假设你第二个数字输入的是:5(加一个回车)
则程序实际收到的是:5/r/n
nextInt() 扫描到了5

nextLine();继续扫描,这个方法会返回当前行的剩余部分,(一直到遇到行分隔符为止,而且不包括行分隔符)
因为5的后面是一个行分隔符/r ,所以nextLine() 就只扫到了一个空的字符串。

评分

参与人数 1技术分 +1 收起 理由
To + 1 赞一个!

查看全部评分

回复 使用道具 举报
天ya~_琼楼 发表于 2013-11-15 17:25
谢谢!问题解决了,我能问下我的问题出在哪了吗?

也许是nextLine()和nextInt()的区别,这个具体的我也不清楚在结尾处有啥区别,
回复 使用道具 举报
你这个是典型的使用nextLine()和其他next混用造成的结果。
原因是:
nextLine()会就收换行符以结束
而使用其他next方法换行符并没有被吃掉
当使用nextInt()(包括其他非nextLine()方法)时
如果继续使用其他非nextLine()方法是不会出问题,
但使用nextLine()方法就不行,他会把你使用nextInt()后所敲的回车吃掉,
并接收此nextInt()之后到回车之间的字符

最好的做法是在使用nextLine()方法时,如果前面使用了其他next方法
那么就在就在此nextLine()方法之前多加一个nextLine()来接收上一个的回车换行符。


在你的输入性别前加一句scan.nextLine();就行,不需用要变量接收。

评分

参与人数 1技术分 +1 收起 理由
To + 1 很给力!

查看全部评分

回复 使用道具 举报
青年黨衛軍 发表于 2013-11-15 17:39
这是由于scan.nextInt()这个方法的执行特点决定的。
因为你在输入完第二个数字以后,按了一下回车。
假设 ...

有道理,谢谢!
回复 使用道具 举报
张鹏 发表于 2013-11-15 17:46
你这个是典型的使用nextLine()和其他next混用造成的结果。
原因是:
nextLine()会就收换行符以结束

明白了,谢谢!
回复 使用道具 举报
输入年龄25以后,你就回车,这时候性别的nextLine()接受的是你的回车换行符:\r\n,所以就没有输出了,同时,因为你这道题,让我更加清楚的了解了nextInt(),nextLine(),谢谢大家
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马