黑马程序员技术交流社区

标题: 程序运行错误,哪位大神帮我看看 [打印本页]

作者: 天ya~_琼楼    时间: 2013-11-15 17:07
标题: 程序运行错误,哪位大神帮我看看
本帖最后由 天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

作者: 杨增坤    时间: 2013-11-15 17:13
  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.         }
复制代码
换一下顺序,就可以了!

希望对你有帮助!

作者: 天ya~_琼楼    时间: 2013-11-15 17:25
杨增坤 发表于 2013-11-15 17:13
换一下顺序,就可以了!

希望对你有帮助!

谢谢!问题解决了,我能问下我的问题出在哪了吗?
作者: 青年黨衛軍    时间: 2013-11-15 17:39
这是由于scan.nextInt()这个方法的执行特点决定的。
因为你在输入完第二个数字以后,按了一下回车。
假设你第二个数字输入的是:5(加一个回车)
则程序实际收到的是:5/r/n
nextInt() 扫描到了5

nextLine();继续扫描,这个方法会返回当前行的剩余部分,(一直到遇到行分隔符为止,而且不包括行分隔符)
因为5的后面是一个行分隔符/r ,所以nextLine() 就只扫到了一个空的字符串。
作者: 杨增坤    时间: 2013-11-15 17:40
天ya~_琼楼 发表于 2013-11-15 17:25
谢谢!问题解决了,我能问下我的问题出在哪了吗?

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

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


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


作者: 天ya~_琼楼    时间: 2013-11-15 17:59
青年黨衛軍 发表于 2013-11-15 17:39
这是由于scan.nextInt()这个方法的执行特点决定的。
因为你在输入完第二个数字以后,按了一下回车。
假设 ...

有道理,谢谢!
作者: 天ya~_琼楼    时间: 2013-11-15 18:00
张鹏 发表于 2013-11-15 17:46
你这个是典型的使用nextLine()和其他next混用造成的结果。
原因是:
nextLine()会就收换行符以结束

明白了,谢谢!
作者: 马明杨    时间: 2013-11-16 09:19
输入年龄25以后,你就回车,这时候性别的nextLine()接受的是你的回车换行符:\r\n,所以就没有输出了,同时,因为你这道题,让我更加清楚的了解了nextInt(),nextLine(),谢谢大家




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2