文系プログラマーのプログラミング備忘録

Java、競プロ、数学などについて書いてます

ScannerのhasNextメソッドの使い方

競プロの問題で入力を受け取る際には、最初に入力の総数を表す n が与えられ、その後にn個の入力が続けて与えられる、というパターンが多いです。この場合は、以下のように書くことで入力を受け取ることができます。

int n = sc.nextInt();
for (int i=0; i<n; i++) {
	//入力を受け取る
}


ところで、AIZU ONLINE JUDGE の問題には、最初に n が与えられず、いきなりn個の入力が与えられるものがありました。この場合は、入力が全部で何個あるのかわからないので、for文で回数指定して受け取ることができません。そんなときに使うのが、Scanner のhasNextメソッドです。

while (sc.hasNext()) {
	//入力を受け取る
}


このように書くことで、与えられた入力がなくなるまで、すなわちn個の入力が与えられた場合にはn回だけwhileループを回すことができます。


AtCoder や yukicoder では、どうやら常に入力の総数 n が最初に与えられるみたいなので、この書き方をする必要はないかと思いますが、テクニックの一つとして覚えておきたいです。