Java でスキャナをクリア
Java の Scanner クラスは入力や出力を取るためによく使われます。その機能を利用するために、Scanner クラスのオブジェクトを作成します。
このメソッドで一度 Scanner を閉じてしまうと、入力ストリームが閉じられているため、入力を取ることができなくなるからです。
Java では他にも Scanner をクリアする方法があり、以下にその方法を説明する例を示します。
Java で nextLine() を用いたスキャナのクリア
これは現在の行をスキャンしてから次の行に Scanner をセットし、新しい行に対して他の操作を行うためのものです。
以下の例では、while ループ内でユーザに入力を求め、それが有効なバイナリであるかどうかを hasNextInt(radix) を用いてチェックしています。有効なバイナリであれば binary 変数に格納され、バイナリでなければ、有効なバイナリ値を入力するように促すメッセージが出力されます。
この状況では、Scanner をクリアしないとループが終わることはありません。値がバイナリでない場合、Scanner は新しい入力を取るために新しい行に移動しなければならません。これが、現在の行を飛ばして新しい行に移動するために nextLine() を使用する理由です。
import java.util.Scanner;
public class ClearScanner {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int binary = 0;
int radix = 2;
while (binary == 0) {
System.out.print("Please input a valid binary: ");
if (input.hasNextInt(radix)) {
binary = input.nextInt(radix);
} else {
System.out.println("Not a Valid Binary");
}
input.nextLine();
}
System.out.print("Converted Binary: " + binary);
}
}
出力:

Java で Scanner をクリアするために新しい Scanner オブジェクトを作成する
Scanner をクリアするもう一つの方法は、ユーザがバイナリ値以外の値を入力したときに新しい Scanner オブジェクトを作成することです。この方法は、新しいオブジェクトが作成されると既存の Scanner オブジェクトがクリアされ、新しい入力ストリームが開始されるために機能します。
import java.util.Scanner;
public class ClearScanner {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int binary = 0;
int radix = 2;
while (binary == 0) {
System.out.print("Please input a valid binary: ");
if (input.hasNextInt(radix)) {
binary = input.nextInt(radix);
} else {
System.out.println("Not a Valid Binary");
}
input = new Scanner(System.in);
}
System.out.print("Converted Binary: " + binary);
}
}
出力:
Please input a valid binary: 23
Not a Valid Binary
Please input a valid binary: 11101
Converted Binary: 29
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn