Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么input.nextint方法有一个\n作为余项?_Java_Io_Java.util.scanner - Fatal编程技术网

Java 为什么input.nextint方法有一个\n作为余项?

Java 为什么input.nextint方法有一个\n作为余项?,java,io,java.util.scanner,Java,Io,Java.util.scanner,在回答这个问题时,我不明白为什么input.nextInt有一个换行符作为剩余字符 答案很简单: Scanner#nextInt()读取下一个整数,但不读取换行符(ENTER),用户按此键提交整数 要理解这一点,您必须知道键入的所有内容都将写入一个缓冲区,Scanner方法尝试从中读取 举个例子: System.out.println("Enter a number: "); int i = scanner.nextInt(); System.out.println("Enter a line

在回答这个问题时,我不明白为什么
input.nextInt
有一个换行符作为剩余字符


答案很简单:

Scanner#nextInt()
读取下一个整数,但不读取换行符(
ENTER
),用户按此键提交整数

要理解这一点,您必须知道键入的所有内容都将写入一个缓冲区,
Scanner
方法尝试从中读取


举个例子:

System.out.println("Enter a number: ");
int i = scanner.nextInt();
System.out.println("Enter a line: ");
String l = scanner.nextLine();
将会发生什么:

  • 用户看到
    输入一个数字:
    ,并将按
    17
    Enter
  • 扫描仪将读取
    17
    ,但保留
    输入的换行符
  • 程序将写入
    Enter一行:
    ,但扫描仪将读取
    Enter
    的换行,而不是等待输入

这纯粹是一个设计决策,原因是
nextInt()
不使用换行符,因为可能还有一些其他标记尚未解析,因此假设字符串中没有任何内容,并使用换行符是最不合适的

例如,您将获得以下输入
123\n

调用
nextInt()

123\n

再次调用
nextInt()


\n

为什么在提交input.nextLine时不发生这种情况?
nextLine(…)
读取所有输入,直到找到换行符。然后将使用该换行符