Java 关于Scanner的hasNext()方法的二三事
在编程笔试(或者某些场景)中,可能存在这样的需求:程序被要求接收不确定数量的一些字符串或者是数字,然后对接收的数据进行相关的处理。
假设这样一个场景,程序被要求接收不定数量的一些整数,然后计算这些数字的和。来看下面这个程序:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int sum = 0;
while(s.hasNextInt()) {
sum += s.nextInt();
}
System.out.println(sum);
}
}
我们的预期是:程序开始运行后,我们通过键盘在终端键入一行不定数量的整数,按下回车,程序紧接着打印出整数之和,然后结束运行。看上去似乎条例清晰,逻辑严密。不过程序实际运行的情况与我们的预期出现了一点偏差:在我们输入数据并按下回车之后,光标移动到了下一行,不过程序并没有打印出我们期待的结果,也没有结束运行,它“停下”了,或者说,它似乎在等待用户继续输入。如果此时你继续输入一行整数,然后按下回车,光标移动到下一行,情况不会发生变化。甚至你不输入任何内容,直接按下回车,情况仍然不会发生变化。但是如果你输入了一个浮点数或者是一个字符串,程序会紧接着打印出你想要的结果,然后结束运行。这很好理解,因为你输入的不是整数,循环会因此结束。
再来看这样一个场景,程序被要求接收不确定数量的一些字符串,然后将其逆序输出。来看下面这个程序:
import java.util