- 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、时间仓促+技术不行,错误在所难免,感谢指出
相关推荐
Scanner scanner = new Scanner(System.in); System.out.print("请输入一个整数: "); int number = scanner.nextInt(); System.out.println("你输入的整数是: " + number); } } ``` 在这个例子中,`nextInt()`...
例如,创建Scanner对象时,我们使用`Scanner input = new Scanner(System.in);`,这里的`input`就是一个Scanner类型的引用,指向了一个Scanner对象。 2. Scanner类常用方法: - `hasNext()`:检查输入流中是否有更...
创建 Scanner 对象时需要指定输入源,通常使用 `System.in` 作为输入源,例如 `Scanner sc = new Scanner(System.in);`。 Scanner 的方法 Scanner 提供了多种方法来读取用户的输入,包括: * `nextInt()`:读取...
Scanner scanner = new Scanner(System.in); System.out.println("请输入一个整数:"); int number = scanner.nextInt(); System.out.println("你输入的数字是:" + number); } } ``` 在这个例子中,`nextInt...
Scanner reader = new Scanner(System.in); // 读取标准输入 Scanner fileReader = new Scanner(new File("example.txt")); // 读取文件 ``` 2. **读取不同类型的数据** - `nextByte()`, `nextDouble()`, `...
一个简单的Scanner类的next()方法例子,最适合小白参考Scanner a = new Scanner(System.in); String v = a.next(); System.out.print("你输入的值是:"+ v); Scanner b = new Scanner(System.in); ...
Scanner scanner = new Scanner(System.in); ``` 这里使用`System.in`作为构造函数的参数,表示从标准输入流(通常是键盘)读取数据。 3. **读取不同类型的数据**: - 读取整数: ```java int number = ...
由于`System.in`是静态的且不可变,一旦关闭就无法再次打开,因此后续尝试创建新的`Scanner`对象并使用`System.in`时,会因为流已经关闭而抛出`NoSuchElementException`。 解决这个问题有几种策略: 1. 每次需要...
Scanner scanner = new Scanner(System.in); ``` ### 2. 读取基本类型数据 #### 2.1 读取整数 ```java int number = scanner.nextInt(); ``` #### 2.2 读取浮点数 ```java double decimal = scanner.nextDouble(); ...
package day2; import java.util.Scanner; public class Test2 { public static void main(String... Scanner sca=new Scanner(System.in); long nu=sca.nextInt(); long mm=sca.nextInt(); niXuShuChu(nu,mm);
localScanner1 = new Scanner(System.in); localStudent1.gender = localScanner1.next().toString(); System.out.print("请输入房间号:"); localScanner1 = new Scanner(System.in); localStudent1.RoomID = ...
Scanner s = new Scanner(System.in); String str = s.nextLine(); int i = s.nextInt(); double d = s.nextDouble(); System.out.println(str + i + d); ``` 3. **判断是否有下一个元素** - `hasNext()`:...
2. 创建对象:然后,我们需要创建`Scanner`对象,通常将它实例化为某个变量,例如`Scanner scanner = new Scanner(System.in);`这里的`System.in`表示从标准输入流(通常是键盘)读取数据。 3. 使用:通过`Scanner`...
在这个`SystemIn`项目中,开发者可能创建了一个工具或库来方便处理`System.in`的输入数据。 `System.in`是一个`InputStream`对象,它表示程序的标准输入流。`InputStream`是Java IO体系中的一个基础类,用于读取...
Scanner(System.in);int no=sc3.nextInt();if(b[no].fine==true&&b[no].use==false){b[no].usename=sname;b[no].use=true;}else{System.out.println("该设备已坏或正在被使用!");}}else if(classname.equals("c")){...
Scanner scanner = new Scanner(System.in); ``` 3. **读取用户输入** - **读取一行字符串**:使用 `nextLine()` 方法来读取用户输入的一行字符串,包括空格: ```java String input = scanner.nextLine(); ...
标题中的“scanner两个例子(转)”表明这篇内容可能包含了两个使用Java的Scanner类的示例。Scanner类是Java标准库中的一个输入处理类,常用于从系统输入、文件或其他输入流读取数据。在这里,我们将深入探讨Scanner...