本文转载自 http://bianku.iteye.com/blog/399715
今天做java的实训的第3题,其中用到了Scanner;写了下面一段代码:
- Student a=new Student();
- Scanner in = new Scanner(System.in);
- System.out.println("请输入学生的姓名: ");
- a.setName(in.nextLine());
- System.out.println("请输入学生的年龄: ");
- a.setAge(in.nextInt());
- System.out.println("请输入学生所在城市: ");
- a.setCity(in.nextLine());
- System.out.println("请输入学生家所在的小区单元: ");
- a.setAddr(in.nextLine());
- System.out.println("请输入邮政编码: ");
- a.setPostcode(in.nextInt());
- System.out.println("请输入学生的出生日期: ");
- a.setDate(in.nextLine());
- System.out.println("******************************");
- a.showStudent();
貌似没错,也能运行。看下执行的过程发现输入年龄后
“请输入学生所在城市:
请输入学生家所在的小区单元:”一起跳出来了
这样:
- 请输入学生的姓名:
- 张三
- 请输入学生的年龄:
- 21
- 请输入学生所在城市:
- 请输入学生家所在的小区单元:
- 常州
- 请输入邮政编码:
- 222314
- 请输入学生的出生日期:
- ******************************
- 该学生的信息为:
- 姓名:张三
- 年龄:21
- 家庭住址:常州
- 邮政编码:222314
- 出生日期:
晕,为什么呢?再看一下代码,仿佛没错呀?此时想到了C语言里好像也有类似的现象,当用getchar输入两行字符时
中间要加一个getchar();用来接收回车键。这里会不会也是类似的情况呢?没有接受便直接跳到下一行了,看这架势有点像。看一下API:API上的解释
nextLine
public String nextLine()
此扫描器执行当前行,并返回跳过的输入信息。
此方法返回当前行的其余部分,不包括结尾处的行分隔符。当前位置移至下一行的行首。
分隔符被nextLine()接受了?
于是写了一个验证的代码:
- int n =in.nextInt() ;
- String s1 = in.nextLine();
- String s2 = in.nextLine();
- 输入:
- 12
- I LOVE YOU
- LOVE YOU
结果应该是什么呢?如果是:
12
I LOVE YOU 那就说明猜想正确了!
运行后发现,果然是这样的,哈哈,和C语言的一样啊
那就仿照着解决下:加一个 in.nextLine();试试:
- Student a=new Student();
- Scanner in = new Scanner(System.in);
- System.out.println("请输入学生的姓名: ");
- a.setName(in.nextLine());
- System.out.println("请输入学生的年龄: ");
- a.setAge(in.nextInt());
- in.nextLine();//加在这!!
- System.out.println("请输入学生所在城市: ");
- a.setCity(in.nextLine());
- System.out.println("请输入学生家所在的小区单元: ");
- a.setAddr(in.nextLine());
- System.out.println("请输入邮政编码: ");
- a.setPostcode(in.nextInt());
- in.nextLine();//还有这!!!
- System.out.println("请输入学生的出生日期: ");
- a.setDate(in.nextLine());
- System.out.println("******************************");
- a.showStudent();
运行试试:
- 请输入学生的姓名:
- 张三
- 请输入学生的年龄:
- 21
- 请输入学生所在城市:
- 三里国
- 请输入学生家所在的小区单元:
- 常州市
- 请输入邮政编码:
- 222314
- 请输入学生的出生日期:
- 1989-02-02
- ******************************
- 该学生的信息为:
- 姓名:张三
- 年龄:21
- 家庭住址:三里国常州市
- 邮政编码:222314
- 出生日期:1989-02-02
ok啦!!!
为什么加一个in.nextLine();就好了呢,原因是nextInt()读入的是仅是数字,而换行符没有读入,
使用nextInt()的时候,读取一定是数值型的字符,然后就按换行符 接着使用nextLine(),它是读到行分隔符就结束,而行分隔符前已经没信息,所以没有读到任何可返回的信息。