Java でスキャナをクリア

Rupam Yadav 2023年10月12日
  1. Java で nextLine() を用いたスキャナのクリア
  2. Java で Scanner をクリアするために新しい Scanner オブジェクトを作成する
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 のクリアスキャナ

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 Yadav
Rupam Yadav avatar Rupam Yadav avatar

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

関連記事 - Java Scanner