`
bianku
  • 浏览: 72377 次
  • 性别: Icon_minigender_1
  • 来自: 常州
社区版块
存档分类
最新评论

Scanner的用法误区

    博客分类:
  • Java
 
阅读更多

今天做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(),它是读到行分隔符就结束,而行分隔符前已经没信息,所以没有读到任何可返回的信息。


恍然大悟啊,原来如此。

总结一下:

1、首先遇到问题要勤于思考,不用畏惧

2、可以联想以前的问题,有没有遇过相似的情况可以借鉴的

申明:

1、本文的层次比较低,如果您不小心看了,浪费您时间了请您谅解

2、时间仓促+技术不行,错误在所难免,感谢指出

 

分享到:
评论
2 楼 yx1989 2011-08-14  
不错,讲解得很清楚
1 楼 bianku 2009-06-01  

相关推荐

    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中的输入处理提供了一...

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

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

    IISPutScanner增强版

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

    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 ...在实际操作中,应该结合其他安全工具和方法,进行全面的系统安全评估。

    ASML Scanner 光刻机介绍

    ASML.Scanner 光刻机介绍 ASML.Scanner 光刻机是半导体制造行业中的关键设备, Plays a crucial role in the semiconductor manufacturing industry。下面是该设备的知识点总结: 一、Course Introduction * ...

    java编程scanner类用法示例

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

    Java中Scanner类的用法.doc

    Scanner 类的使用方法非常灵活,可以根据需要选择不同的方法来读取输入数据。例如,可以使用 hasNextXXX() 方法来判断是否有下一个输入数据,然后使用 nextXXX() 方法来读取该数据。例如,hasNextDouble() 方法可以...

Global site tag (gtag.js) - Google Analytics