Java入門⑤ キーボードから入力を受け取る ── Scanner
Java入門⑤ キーボードから入力を受け取る ── Scanner
前回は「計算する(演算子)」をやりました。
今回は、キーボードから入力を受け取る方法です。これができると、プログラムが一気に「対話」っぽくなります。Javaでは Scanner(スキャナー)という道具を使います。
これまでは「表示」だけだった
これまで、画面に文字を出す System.out.println を使ってきました。これは、プログラムから人へ出力(表示)する命令です。
今回はその逆。人からプログラムへ、入力してもらいます。
Scanner を使う準備
Javaで入力を受け取るには、Scanner という道具を使います。使うには、2つの準備が必要です。
import java.util.Scanner; // ① ファイルの先頭に書く
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // ② 道具を用意
// ここで入力を受け取れる
}
}
import java.util.Scanner;… 「Scanner という道具を使います」という宣言。ファイルの先頭に書くnew Scanner(System.in)… キーボード用の Scanner を用意
最初は、この2行も「入力するためのおまじない」として受け入れてOKです。「入力したいときは、Scanner を用意する」と覚えておきましょう。
文字を入力してもらう
準備ができたら、入力を受け取れます。名前を聞いて、あいさつする例です。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("お名前は?");
String name = scanner.nextLine();
System.out.println(name + "さん、こんにちは!");
}
}
実行すると、こうなります。
お名前は?
山田 ← ここでキーボードから入力
山田さん、こんにちは!
scanner.nextLine() が、「キーボードから1行の入力を受け取る」命令です。受け取った文字を、変数 name に入れて覚えています。
数字を入力してもらう
数字を受け取りたいときは、別の命令を使います。
System.out.println("年齢は?");
int age = scanner.nextInt();
System.out.println("あなたは" + age + "歳ですね");
nextLine()… 文字(String)として受け取るnextInt()… 整数(int)として受け取る
受け取りたい型によって、使う命令が変わります。整数なら nextInt()、小数なら nextDouble()、文字なら nextLine()、という具合です。
つまずきポイント
Scanner には、初心者がほぼ全員はまる、有名な罠があります。nextInt() と nextLine() を混ぜて使うときに起きます。
int age = scanner.nextInt(); // 数字を入力
String name = scanner.nextLine(); // 名前を入力 … のはずが、飛ばされる!
nextInt() の後に nextLine() を使うと、名前を入力する前に、勝手に進んでしまうことがあります。これは、nextInt() が「改行」を残してしまうために起きる、Javaの有名なクセです。
対処法はいくつかありますが、初心者には「全部 nextLine() で受け取って、数字は後から変換する」のがいちばん分かりやすいです。
System.out.println("年齢は?");
String input = scanner.nextLine(); // まず文字として受け取る
int age = Integer.parseInt(input); // 整数に変換する
Integer.parseInt(...) は「文字列を整数に変換する」命令です。前回までの「数字の100」と「文字の"100"」は別物、という話を思い出してください。入力された "20" は文字なので、計算に使うには整数の 20 に変換するわけです。
このやり方なら、あの厄介な罠を避けられます。最初は「入力は全部 nextLine、数字は parseInt で変換」と覚えておくと、トラブルが減ります。
まとめ
- 入力には
Scannerを使う(importとnew Scanner(System.in)が準備) - 文字は
nextLine()、整数はnextInt() nextInt()とnextLine()を混ぜると、飛ばされる罠がある- 初心者は「全部 nextLine で受け取り、数字は
Integer.parseInt()で変換」が安全
次回は、条件によって動きを変える if文 です。今回の入力と組み合わせると、ぐっとプログラムらしくなります。

