[英]Exception Handling with Scanner.nextInt() vs. Scanner.nextLine()
[英]Scanner nextInt() vs nextLine() reading from console … why can I use nextInt() without nextLine()?
在单独的行中将数字输入控制台时,为什么我不必使用 nextLine? 我希望控制台解释每行的结尾有 \\n 但无论我在每个 nextInt() 之后使用 nextLine() 还是程序的工作方式都是一样的。 使用 Eclipse。
// Example used
10 5 // # lines to read , divisor
22 // if # divisible by divisor, count++
15
10
25
17
13
15
10
7
9
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
int n = getNumber(keyboard);
int k = getNumber(keyboard);
int numLinesPassed = getNumberPassCriteria(keyboard, n, k);
System.out.println("# Passed: " + numLinesPassed);
}
public static int getNumber(Scanner keyboard) {
return keyboard.nextInt();
}
public static int getNumberPassCriteria(Scanner keyboard, int n, int k) {
int counter = 0;
for(int i = 0; i < n; i++) {
int value = keyboard.nextInt();
if (value % k == 0) {
counter++;
}
//keyboard.nextLine(); not understand why I don't need this
}
return counter;
}
因为Scanner
的默认分隔符是这种模式
\p{javaWhitespace}+
(注意:这个确切的模式没有明确记录,但是当你在没有明确指定不同的分隔符的情况下实例化一个Scanner
时,它是你调用delimiter()
方法获得的结果)
编辑
根据user15244370的建议,我所做的这些乱七八糟的参考实际上直接记录在此处的Scanner
文档中。 您可以直接跳到下面的列表。
该模式的含义记录在Pattern
类的文档中,该类本身引用了Character.isWhitespace
方法该模式意味着至少一个序列
其中包括换行符(第二个要点)。
可能与Scanner 在使用 next() 或 nextFoo() 后跳过 nextLine()混淆? .
如果您正在阅读或尝试使用nextLine
阅读数字后的下一行,这只是一个问题。
为什么? nextInt
读取一个标记,定义为分隔符之间的文本(默认空格包括换行符和回车符),这意味着,如果输入以一个或多个分隔符开头,则忽略(丢弃)。 nextLine
不读取标记,它只是读取到换行符; 所以如果下一个字符是换行符,则返回一个空字符串。
易于测试:只需在数字之间输入几个空行 - 您的代码应该可以毫无问题地读取它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.