1. ホーム
  2. Java

Javaプログラムでのデータ入力方法

2022-02-26 03:06:48

Javaを初めて使う人は、Javaのプログラムにデータを入力する方法について、私と同じように戸惑っていることでしょう。最初はCやC++のscanfやcinのようなものだと素朴に思っていましたが、実はJavaにはscanfやcinはありません。

いくつかのブログを読んで、Javaでのデータ入力の仕方を少し勉強したのですが(でもお偉いさんのブログもあって、白人の私にはよくわかりませんでした)、その中でとても使いやすいと感じたものがあります。

一番簡単で便利だと思うのはこちら、Scannerクラスです。

まずは、以下のコードの仕様に基づき、Scannerの使い方を簡単に説明します。

package first;
import java.util.Scanner;

public class Input {

	public static void main(String[] args) {

		Scanner in = new Scanner(System.in);//define scanner, wait for input
		System.out.println("Please enter your name:");
		String name = in.nextLine();//character type of input
		System.out.println(name);
		System.out.println("Please enter your age: ");
		int age = in.nextInt();//integer type of input
		System.out.println(age);
		System.out.println("Please enter your height: ");
		double height = in.nextDouble();// decimal type of input
		System.out.println(height);

	}

}

Scannerクラスはjava.util.Scannerパッケージ内にあるので、プログラムにこのパッケージを前置してください。

Scanner in = new Scanner(System.in);の行がポイントです。この文の意味は、new Scanner(System.in) で Scanner を作成し、コンソールが Enter キーを押す最後まで入力を待ち、その入力を Scanner にスキャンオブジェクトとして渡しているということです。

そして、入力を取得したい場合は、ScannerのnextLine()メソッドを呼び出す必要があるので、String name = in.nextLine(), int age = in.nextInt(), double height = in.nextDouble() を使って、入力を取得する .

コードが示すように、Scannerクラスは、文字列、整数、浮動小数点型のいずれであっても、入力関数を実装するためにわずかな変更を加えるだけで、非常に使い勝手のよいクラスとなります。

しかし、ここで一つ注意しなければならないのは、このコードのように、nextLine()メソッドがキャリッジリターンを食べてしまうことです。

package first;
import java.util.Scanner;

public class Input {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);//define scanner, wait for input
		System.out.println("Please enter your name:");
		String name = in.nextLine();//character type of input
		System.out.println(name);
		System.out.println("Please enter your age: ");
		int age = in.nextInt();//integer type of input
		System.out.println(age);
		System.out.println("Please enter the apple in English: ");
		//String s = in.next();
		String s = in.nextLine();
		System.out.println(s);
		System.out.println("Please enter your height: ");
		double height = in.nextDouble();// decimal type of input
		System.out.println(height);
		
	}

}

実行してみると、このプログラムではappleの英語を入力することができず、carが返されるだけであることがわかる。これは、年齢を入力した後のキャリッジリターンがnextLine()に食われるためで、何も出力されませんが、in.next()を使えば出力されます。

(以下、両方の実行結果です)

in.nextLine()を実行した結果です。

これはin.next()を実行した結果です。

最後に、nextLine()とnext()の違いについて補足します。

nextLine()メソッドは、Enterキーより前のすべての文字を返すので、スペースを含む文字列を取得することが可能です。

next() は、有効な文字の前にあるスペースを自動的に除去し、スペースを含む文字列ではなく、入力された文字のみを返します。

<スパン 更新してください。

スペースを含む文字列を入力する場合は、次のように in.nextLine(); というステートメントを追加して、キャリッジリターンを食べさせることができます。

package first;
import java.util.Scanner;

public class Input {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);//define scanner, wait for input
		System.out.println("Please enter your name:");
		String name = in.nextLine();//character type of input
		System.out.println(name);
		System.out.println("Please enter your age: ");
		int age = in.nextInt();//integer type of input
		System.out.println(age);
		System.out.println("Please enter the apple in English: ");
		//String s = in.next();
        in.nextLine(); //eat the carriage return character
		String s = in.nextLine();
		System.out.println(s);
		System.out.println("Please enter your height: ");
		double height = in.nextDouble();// decimal type of input
		System.out.println(height);
		
	}

}

実行結果は以下の通りです。