提问人:Naman Sharma 提问时间:6/8/2022 最后编辑:Naman Sharma 更新时间:6/8/2022 访问量:63
在 java 中读取 int 和 double 后,需要调用 nextLine() 三次才能读取字符串
Call to nextLine() needed thrice for reading a string after it has read int and double in java
问:
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
/* Read input */
Scanner scan = new Scanner(System.in);
int i = scan.nextInt();
double d = scan.nextDouble();
scan.nextLine(); // gets rid of the pesky newline
String s = scan.nextLine();
scan.close();
/* Print output */
System.out.println("String: " + s);
System.out.println("Double: " + d);
System.out.println("Int: " + i);
}
}
上面的代码在 hackerrank 编译器中运行良好。而如果我在 IntelliJ 上运行它,则需要对 scan.nextLine() 进行一次额外的调用才能读取实际的字符串。
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
/* Read input */
Scanner scan = new Scanner(System.in);
int i = scan.nextInt();
double d = scan.nextDouble();
scan.nextLine(); // gets rid of the pesky newline
scan.nextLine(); // gets rid of the pesky newline
String s = scan.nextLine();
scan.close();
/* Print output */
System.out.println("String: " + s);
System.out.println("Double: " + d);
System.out.println("Int: " + i);
}
}
有人可以帮我解释为什么会发生这种情况吗?我假设对 nextDouble() 的调用将忽略 nextInt() 在缓冲区中留下的 \n,并拾取下一个双精度标记并在缓冲区中保留一个新的 \n。因此,对 nextLine() 的单个调用应该足以从缓冲区中清除该 \n,但是当我在 IntelliJ 上运行它时,为什么需要 2 次调用。
这是JAVA版本问题,还是我缺少一些非常基本的东西?
答:
1赞
cyberbrain
6/8/2022
#1
你可能看到了这个官方 IDEA 问题的影响:控制台 readLine 跳过 2022.1.1 中的输入
您可以更新到 2022.1.2,其中此问题已修复。
评论