其实最开始我是觉得这个问题没什么好讲的,但在OJ中刷题的时候发现,很多题目不是不会做,而是搞不定输入输出,因此就又返回来仔细研究了一下 Java 的 Scanner 类,后来发现还是有很多需要注意的地方的,因此就在这里做个记录
先看一段代码
import java.util.Scanner;
/**
* @author winston
*/
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入:");
int first = scanner.nextInt();
System.out.println("first:" + first);
int second = scanner.nextInt();
System.out.println("second:" + second);
System.out.println(String.format("你输入的数为:%d %d", first, second));
int third = scanner.nextInt();
System.out.println("third:" + third);
while (scanner.hasNextInt()) {
int a = scanner.nextInt();
int b = scanner.nextInt();
System.out.println(String.format("a:%d \t b:%d", a, b));
System.out.println("OK");
}
}
}
第一种输入方式
最后程序并没有结束,至于原因请看这里
这种输入方式很常规,就是按照程序写的时候的顺序进行输入,很多人可能也都是这样用的,没毛病
第二种输入方式
可以发现,程序是在读取完我们当次的输入之后,再把结果一次性输出的
第三种输入方式
这里特意把 while 循环中要输入的数据和第三个数一起输入了,发现结果仍然是正常输出的
总结
从上面的结果可以看出,无论我们怎么输入,无论我们分多少行输入,nextInt() 都是按顺序获取我们的输入,每个数之间以空格作为分割的标志,next() 方法也是如此
注意:nextLine() 方法和 next() 方法是不一样的,nextLine() 是一次获取一行的输入,包括该行的空格
我们把程序所有的输出都去掉,只留一个 OK 的输出,再看一下
红色框框里的部分是不是和我们在一些OJ系统中看到的输入样例很像
由此我们得到启发:在处理一些OJ系统的输入时,我们只需牢记一件事,要读取多少个数,我们就写多少个 nextInt() 方法,当然需要循环的时候就将其放在循环里即可,而不要管什么换不换行,或者是使用 readLine() 之类的方法,然后再以空格分割