`
yx1989
  • 浏览: 11114 次
  • 性别: Icon_minigender_1
  • 来自: 烟台
社区版块
存档分类
最新评论

Scanner的用法误区

 
阅读更多

本文转载自 http://bianku.iteye.com/blog/399715

感谢 bianku  

今天做java的实训的第3题,其中用到了Scanner;写了下面一段代码

Java代码 
  1. Student a=new Student();  
  2.         Scanner in = new Scanner(System.in);  
  3.         System.out.println("请输入学生的姓名: ");                 
  4.         a.setName(in.nextLine());  
  5.         System.out.println("请输入学生的年龄: ");  
  6.         a.setAge(in.nextInt());  
  7.         System.out.println("请输入学生所在城市: ");  
  8.         a.setCity(in.nextLine());  
  9.         System.out.println("请输入学生家所在的小区单元: ");  
  10.         a.setAddr(in.nextLine());  
  11.         System.out.println("请输入邮政编码: ");  
  12.         a.setPostcode(in.nextInt());  
  13.         System.out.println("请输入学生的出生日期: ");  
  14.         a.setDate(in.nextLine());  
  15.         System.out.println("******************************");  
  16.         a.showStudent();  

 貌似没错,也能运行。看下执行的过程发现输入年龄后

“请输入学生所在城市:

请输入学生家所在的小区单元:”一起跳出来了

这样:

Java代码 
  1. 请输入学生的姓名:   
  2. 张三  
  3. 请输入学生的年龄:   
  4. 21  
  5. 请输入学生所在城市:   
  6. 请输入学生家所在的小区单元:   
  7. 常州  
  8. 请输入邮政编码:   
  9. 222314  
  10. 请输入学生的出生日期:   
  11. ******************************  
  12. 该学生的信息为:  
  13. 姓名:张三  
  14. 年龄:21  
  15. 家庭住址:常州  
  16. 邮政编码:222314  
  17. 出生日期:  

 晕,为什么呢?再看一下代码,仿佛没错呀?此时想到了C语言里好像也有类似的现象,当用getchar输入两行字符时

中间要加一个getchar();用来接收回车键。这里会不会也是类似的情况呢?没有接受便直接跳到下一行了,看这架势有点像。看一下API:API上的解释 
nextLine 
public String nextLine() 
此扫描器执行当前行,并返回跳过的输入信息。 
此方法返回当前行的其余部分,不包括结尾处的行分隔符。当前位置移至下一行的行首。

分隔符被nextLine()接受了?

于是写了一个验证的代码:

Java代码 
  1. int n =in.nextInt() ;  
  2. String s1 = in.nextLine();   
  3. String s2 = in.nextLine();   
  4. 输入:  
Java代码 
  1. 12   
Java代码 
  1. I LOVE YOU  
Java代码 
  1. LOVE YOU  

 

结果应该是什么呢?如果是:

12

I LOVE YOU  那就说明猜想正确了!

运行后发现,果然是这样的,哈哈,和C语言的一样啊

那就仿照着解决下:加一个 in.nextLine();试试:

Java代码 
  1. Student a=new Student();  
  2.   Scanner in = new Scanner(System.in);  
  3.   System.out.println("请输入学生的姓名: ");      
  4.   a.setName(in.nextLine());  
  5.   System.out.println("请输入学生的年龄: ");  
  6.   a.setAge(in.nextInt());  
  7.      in.nextLine();//加在这!!  
  8.   System.out.println("请输入学生所在城市: ");  
  9.   a.setCity(in.nextLine());  
  10.   System.out.println("请输入学生家所在的小区单元: ");  
  11.   a.setAddr(in.nextLine());  
  12.   System.out.println("请输入邮政编码: ");  
  13.   a.setPostcode(in.nextInt());  
  14.   in.nextLine();//还有这!!!  
  15.   System.out.println("请输入学生的出生日期: ");  
  16.   a.setDate(in.nextLine());  
  17.   System.out.println("******************************");  
  18.   a.showStudent();  

 

运行试试:

Java代码 
  1. 请输入学生的姓名:   
  2. 张三  
  3. 请输入学生的年龄:   
  4. 21  
  5. 请输入学生所在城市:   
  6. 三里国  
  7. 请输入学生家所在的小区单元:   
  8. 常州市  
  9. 请输入邮政编码:   
  10. 222314  
  11. 请输入学生的出生日期:   
  12. 1989-02-02  
  13. ******************************  
  14. 该学生的信息为:  
  15. 姓名:张三  
  16. 年龄:21  
  17. 家庭住址:三里国常州市  
  18. 邮政编码:222314  
  19. 出生日期:1989-02-02  

 ok啦!!!

为什么加一个in.nextLine();就好了呢,原因是nextInt()读入的是仅是数字,而换行符没有读入,

使用nextInt()的时候,读取一定是数值型的字符,然后就按换行符 接着使用nextLine(),它是读到行分隔符就结束,而行分隔符前已经没信息,所以没有读到任何可返回的信息。

 

分享到:
评论

相关推荐

    Java中Scanner用法.doc

    相比于之前的`StringTokenizer`和`Matcher`类,`Scanner`不仅功能更加强大,而且使用起来更加方便灵活。本文将详细介绍`Scanner`类的基本用法以及一些高级技巧。 #### 二、基本概念与构造方法 `Scanner`类位于`java...

    burpsuite插件之Java Deserialization Scanner使用方法1

    Java Deserialization Scanner 提供的功能远不止这些基本用法,它还可以进行更复杂的配置和自动化测试。在GitHub项目的文档中,你可以找到更多关于如何自定义测试设置、配置payload生成器以及与其他Burp Suite功能...

    Scanner类的用法

    ### Scanner类的用法 #### 一、简介与基本用法 `Scanner`类是Java SDK 1.5版本引入的新特性,它提供了一种方便的方式来读取基本数据类型...掌握`Scanner`类的使用方法对于编写交互式程序或处理大量数据非常有帮助。

    Java中Scanner类的用法

    下面通过两个示例代码进一步了解`Scanner`类的使用方法: ##### 示例一:从控制台读取数据 ```java import java.util.Scanner; public class Example { public static void main(String[] args) { System.out....

    java Scanner 的用法

    #### 二、基本使用方法 1. **创建 Scanner 对象** 创建一个 `Scanner` 对象通常有两种方式: - 从标准输入流 `System.in` 获取输入。 - 从文件中读取数据。 ```java Scanner reader = new Scanner(System.in...

    java输入语句scanner用法讲解.pdf

    本文将详细介绍 `Scanner` 类的使用方法及其应用场景。 #### 二、`Scanner` 类简介 `Scanner` 类是 Java 中用于读取基本类型和字符串的实用工具类,它位于 `java.util` 包中。`Scanner` 类可以读取来自不同源的...

    Java语法:Scanner用法

    ### Java语法:Scanner类用法详解 #### 一、引言 在Java编程语言中,`Scanner`类是处理输入的核心工具之一。它提供了一系列的方法来读取不同类型的输入数据,如整数、浮点数、字符串等。本文将详细介绍如何使用`...

    burp安装Upload Scanner插件

    burp安装Upload Scanner插件

    IISPutScanner1.3原版

    IISPutScanner1.3原版的使用方法一般包括以下步骤: 1. **下载和安装**:从可靠源获取IISPutScanner1.3的原版文件,如提供的"IISPutScanner.exe",并按照安装指南进行安装。 2. **配置扫描参数**:根据目标服务器...

    Scanner+hasNextInt习题

    在本篇文章中,我们将深入探讨如何使用`Scanner`来监听键盘输入,并且特别关注`hasNextInt()`方法的使用,以实现对整数的正确读取及非整数输入的过滤。 #### Scanner类简介 `Scanner`类为Java中的输入处理提供了一...

    文件夹容量查看器——scanner

    在日常数据管理中,Scanner软件可以帮助用户迅速识别那些不常使用却占用大量磁盘空间的文件,如过时的系统日志、缓存文件或未使用的媒体文件,从而为用户释放宝贵的存储空间。它也可以用来监测特定项目或应用程序的...

    IISPutScanner增强版

    【IISPutScanner增强版】是一款专为网络安全专业人士设计的工具,主要用于检测和利用IIS(Internet Information Services)服务器的潜在漏洞。IIS是微软公司提供的一个强大的Web服务器软件,广泛应用于各种网络环境...

    java中Scanner类nextLine()和next()的区别和使用方法

    Java 中 Scanner 类 nextLine() 和 next() 的区别和使用方法 Java 中的 Scanner 类提供了多种方法来读取输入数据,其中 nextLine() 和 next() 是两个常用的方法,但它们之间有着重要的区别。 next() 方法 next() ...

    Advanced-IP-Scanner

    7. **易于使用**:Advanced_IP_Scanner界面简洁,操作直观,即便是对网络管理不熟悉的用户也能轻松上手。 **文件信息**: 压缩包中的文件"Advanced_IP_Scanner_2.5.3646.exe"是Advanced-IP-Scanner的安装程序,...

    Java编程实现向文本文件中读取数据之Scanner用法示例

    Java编程实现向文本文件中读取数据之Scanner用法示例主要介绍了Java编程实现向文本文件中读取数据之Scanner用法,结合实例形式分析了java使用Scanner类读取文本文件相关操作技巧与注意事项。 一、Scanner类概述 ...

    Java基础之Scanner键盘录入.docx

    Java 基础之 Scanner 键盘录入 Java 中的 Scanner 键盘录入是 Java 前期学习中非常...使用 Scanner 需要导入包,创建 Scanner 对象,并使用其提供的方法来读取用户的输入。最后,需要关闭 Scanner,以释放系统资源。

    IISPutScanner+IISWrite

    标题"IISPutScanner+IISWrite"涉及到的是两个在网络安全领域中常见的工具,主要用于渗透测试。IISPutScanner和IISWrite是针对Microsoft ...在实际操作中,应该结合其他安全工具和方法,进行全面的系统安全评估。

    RTLSDR-Scanner-1.3.2.zip_C++_RTLSDR_RTLSDR Scanner_RTLSDR-Scanne

    RTLSDR-Scanner-1.3.2.zip 是一个包含C++编程语言实现的软件工具,主要用于配合RTL-SDR(Realtek低成本软件定义无线电)设备进行射频扫描。RTLSDR Scanner是一款实用的开源软件,它允许用户探索并检测周围环境中不同...

    java编程scanner类用法示例

    以下是一些关于`Scanner`类的基本用法: 1. **创建Scanner对象**: 创建`Scanner`对象通常与`System.in`关联,以从控制台获取用户输入。例如: ```java import java.util.Scanner; public class Main { ...

Global site tag (gtag.js) - Google Analytics