浏览 3488 次
锁定老帖子 主题:Scanner的用法误区
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-01
最后修改:2009-06-01
今天做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()接受了? 于是写了一个验证的代码: 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(),它是读到行分隔符就结束,而行分隔符前已经没信息,所以没有读到任何可返回的信息。
总结一下: 1、首先遇到问题要勤于思考,不用畏惧 2、可以联想以前的问题,有没有遇过相似的情况可以借鉴的 申明: 1、本文的层次比较低,如果您不小心看了,浪费您时间了请您谅解 2、时间仓促+技术不行,错误在所难免,感谢指出
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-06-01
|
|
返回顶楼 | |