Java: Module3 Lesson 5
Scanner.nextLine()
input.nextInt();
读取整数后,为什么需要紧接着调用 input.nextLine(),为什么需要这个额外的
nextLine()?
问题的根源
在 Java 的 Scanner
中:
nextInt()
读取整数 但不会读取换行符,只读取数值部分。- 用户在输入整数时按下
Enter
,这个Enter
生成的换行符 (\n
) 仍然留在输入流中。 nextLine()
读取整行字符串,包括换行符 (\n
),所以:- 如果
nextLine()
直接跟在nextInt()
之后,它会 先读取这个遗留的换行符,导致day
变量变成一个空字符串,而不是用户实际输入的星期名称。
- 如果
如何修正?
方法 1(正确方式):添加 input.nextLine();
以消费掉 \n
:
1 |
|
方法 2(用 next()
代替 nextLine()
) 如果星期名称是单个单词(比如 Monday
),可以用 next()
:
1 |
|
但如果用户输入包含空格的字符串,next()
只会读取 monday
,而 and
仍留在输入流中。
1 |
|
总结
如果 nextInt()
后面要读取整行字符串,必须用 nextLine()
先吃掉换行符,否则 nextLine()
直接读取换行符,导致 day
变量变成空字符串。
通配符导入和具体类导入
在 Java 中,使用 import java.util.*;
这样的 通配符导入(wildcard import)和使用 具体类导入(fully-qualified import,如 import java.util.ArrayList;
)在编译后的 字节码(bytecode) 上是完全相同的。这是因为 Java 的 import
语句仅仅是编译器的辅助工具,不会影响运行时的行为。
- import只是告诉编译器使用的类的全名,以方便编译器实际导入使用的类
- 在运行时,Java 通过 类加载器(ClassLoader) 加载类,而不是依赖
import
语句 - 唯一的区别是 编译时可能会有一点点额外的处理时间,因为编译器需要查找通配符
import
下实际使用的类
Java: Module3 Lesson 5
https://hexwhat.top/2025/03/30/cs1331-1-5/