Java入門 STEP5|キーボードから値を入力してみよう

karin@taishi@felmia

キーボードから値を入力するには?

ここまでのプログラムでは、使用する値をあらかじめコードの中に書いていました。

例えば、次のようなコードです。

String name = "Lumy";

この場合、名前を変更するにはコードを書き換える必要があります。

しかし、実際のプログラムでは、実行した人に名前や数字などを入力してもらい、その値を使いたいことがあります。

Javaでは、Scannerを使うことで、キーボードから入力された値を受け取ることができます。

例えば、

名前を入力してください:

と表示して、入力された名前を使って、

こんにちは、Lumyさん!

のように表示することができます。

Scannerを使う準備

Scannerを使うには、まず次の1行をJavaファイルの先頭に書きます。

import java.util.Scanner;

importは、Javaに用意されている機能をプログラムで使えるようにするための記述です。

今回は、java.utilの中にあるScannerを使うために、この1行を書きます。

importについては今後も登場します。今は、「Scannerを使うために必要な準備」と覚えておけば大丈夫です。

次に、mainメソッドの中でScannerを使えるようにします。

Scanner scanner = new Scanner(System.in);

少し長いコードですが、今の段階ですべての意味を理解する必要はありません。

このコードで、キーボードから入力された値を受け取る準備ができます。

Scannerを使うときは、まずこの2つ

① Javaファイルの先頭に書く

import java.util.Scanner;

mainメソッドの中に書く

Scanner scanner = new Scanner(System.in);

まずは、この形を覚えておきましょう。

Scannerを使って文字列を入力してみよう

それでは、実際にキーボードから入力した文字列を受け取ってみましょう。

今回は、新しくScannerSampleクラスを作成してください。

作成できたら、次のコードを入力します。

import java.util.Scanner;

public class ScannerSample {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("名前を入力してください");

        String name = scanner.nextLine();

        System.out.println("こんにちは、" + name + "さん!");

        scanner.close();
    }

}

プログラムを実行すると、コンソールに次のように表示されます。

実行結果

名前を入力してください

この状態でプログラムが止まったように見えますが、エラーではありません。

キーボードからの入力を待っている状態です。

Eclipseのコンソールに、例えば、

Lumy

と入力して、Enterキーを押してみましょう。

すると、次のように表示されます。

こんにちは、Lumyさん!

コードの意味を確認しよう

今回初めて登場した部分を確認してみましょう。

Scanner scanner = new Scanner(System.in);

キーボードから入力された値を受け取るための準備をしています。

次に、

String name = scanner.nextLine();

nextLine()を使って、入力された文字列を受け取っています。

受け取った文字列は、nameという変数に代入されます。

そのため、

System.out.println("こんにちは、" + name + "さん!");

で、入力された名前を使ってメッセージを表示することができます。

最後の、

scanner.close();

では、使用したScannerを閉じています。

文字列を入力するときはnextLine()

scanner.nextLine()を使うと、キーボードから入力された文字列を受け取ることができます。

受け取った値をString型の変数に入れることで、その後の処理で使用できます。

Eclipseで入力できないとき

プログラムを実行したあとに文字を入力するときは、Eclipseの「コンソール」部分をクリックしてから入力します。

エディターに文字を入力するわけではないので注意しましょう。

数字を入力してみよう

Scannerでは、文字列だけでなく数字を入力することもできます。

整数を入力するときは、nextInt()を使います。

今回は新しくNumberInputSampleクラスを作成してください。

作成できたら、次のコードを入力します。

import java.util.Scanner;

public class NumberInputSample {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("年齢を入力してください");

        int age = scanner.nextInt();

        System.out.println("あなたは" + age + "歳です");

        scanner.close();
    }

}

プログラムを実行すると、コンソールに次のように表示されます。

実行結果

年齢を入力してください

例えば、コンソールに、

25

と入力してEnterキーを押します。

すると、次のように表示されます。

あなたは25歳です

nextLine()とnextInt()の違い

ここまでに、2種類の入力方法が登場しました。

書き方受け取るデータ変数の例
nextLine()文字列String name
nextInt()整数int age

文字列を入力するときは、

String name = scanner.nextLine();

整数を入力するときは、

int age = scanner.nextInt();

のように使い分けます。

入力するデータに合わせて使い分けよう

文字列 → nextLine()

整数 → nextInt()

nextInt()で受け取った値はint型なので、そのまま計算や条件分岐にも使用できます。

入力した値を条件分岐で使ってみよう

STEP4で学んだif文と組み合わせてみましょう。

今回は新しくAgeCheckSampleクラスを作成してください。

import java.util.Scanner;

public class AgeCheckSample {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("年齢を入力してください");

        int age = scanner.nextInt();

        if (age >= 20) {
            System.out.println("20歳以上です");
        } else {
            System.out.println("20歳未満です");
        }

        scanner.close();
    }

}

例えば25と入力すると、

実行結果

20歳以上です

18と入力すると、

実行結果

20歳未満です

と表示されます。

ルミィ
ルミィ

今まで勉強した変数や条件分岐とつながってきたね♪
入力した値によって結果が変わると、プログラムらしくなってきた!

nextInt()とnextLine()を続けて使うときの注意

nextInt()nextLine()を続けて使う場合は、少し注意が必要です。

例えば、「年齢」と「名前」を順番に入力するために、次のように書いたとします。

System.out.println("年齢を入力してください");
int age = scanner.nextInt();

System.out.println("名前を入力してください");
String name = scanner.nextLine();

一見すると問題なさそうですが、このコードを実行すると、名前を入力する前にnextLine()が終わってしまうことがあります。

なぜ入力が飛ばされるの?

nextInt()は入力された数字を受け取りますが、Enterキーを押したときの改行は残ったままになります。

その直後にnextLine()を使うと、残っている改行を読み取ってしまいます。

そのため、「名前を入力できずに次へ進んでしまった」ように見えます。

nextInt()のあとにnextLine()を使うときは注意!

nextInt()のあとには、入力時の改行が残ります。

続けてnextLine()を使いたい場合は、その前に一度nextLine()を実行して、残っている改行を読み取ります。

実際に確認してみよう

今回は新しくScannerMixSampleクラスを作成してください。

次のコードでは、nextInt()のあとにnextLine()を1回追加しています。

import java.util.Scanner;

public class ScannerMixSample {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("年齢を入力してください");
        int age = scanner.nextInt();

        scanner.nextLine();

        System.out.println("名前を入力してください");
        String name = scanner.nextLine();

        System.out.println(name + "さんは" + age + "歳です");

        scanner.close();
    }

}

例えば、年齢に25、名前にLumyと入力します。

実行結果

年齢を入力してください
25
名前を入力してください
Lumy
Lumyさんは25歳です

途中にある、

scanner.nextLine();

では、文字列を変数に入れていません。

これは、nextInt()のあとに残っている改行を読み取るために入れています。

覚えておきたい組み合わせ

nextInt()で整数を入力

nextLine()で残った改行を読み取る

nextLine()で文字列を入力

Scannerを使っていて「入力が飛ばされた!」となったら、この部分を確認してみましょう。

よくある間違い

Scannerを使うときは、これまでのコードにはなかった間違いも起こりやすくなります。

特に最初のうちは、次のポイントを確認してみましょう。

importを書き忘れている

Scannerを使う場合は、Javaファイルの先頭にimportを書く必要があります。

Scannerがエラーになったら確認しよう

Javaファイルの先頭に、次の記述があるか確認します。

import java.util.Scanner;

Scannerの部分に赤い波線などが表示されている場合は、まずimportを確認してみましょう。

数字を入力するところに文字を入力している

nextInt()は、整数を入力するために使います。

例えば、

int age = scanner.nextInt();

と書いているところで、

Lumy

のような文字を入力すると、整数として受け取ることができないためエラーになります。

nextInt()25などの整数を入力する

nextLine()Lumyなどの文字列を入力する

何を入力するプログラムなのか確認してから入力しましょう。

入力する場所を間違えている

Scannerで値を入力するときは、Javaのコードを書いているエディターではなく、Eclipseのコンソールに入力します。

プログラムを実行して入力待ちになったら、コンソール部分をクリックしてから値を入力し、Enterキーを押します。

nextLine()の入力が飛ばされる

nextInt()のあとにnextLine()を使うと、入力が飛ばされたように見えることがあります。

これは、nextInt()のあとに改行が残っていることが原因です。

先ほど学んだように、

nextInt()

nextLine()で残った改行を読み取る

nextLine()で文字列を入力する

という順番になっているか確認してみましょう。

ルミィ
ルミィ

Scannerでうまく入力できないときは、まず「入力する場所」と「nextInt()・nextLine()の使い方」を確認してみよう♪

STEP5のまとめ

このSTEPでは、Scannerを使ってキーボードから入力された値を受け取る方法を学びました。

最後に、今回のポイントを振り返っておきましょう。

  • Scannerを使うと、キーボードから入力された値を受け取ることができる
  • Scannerを使うにはimport java.util.Scanner;を書く
  • nextLine()を使うと、文字列を受け取ることができる
  • nextInt()を使うと、整数を受け取ることができる
  • 入力された値は変数に入れて、その後の処理で使用できる
  • 入力された値をif文などの条件分岐に使うこともできる
  • nextInt()のあとにnextLine()を使う場合は、残っている改行に注意する
  • 入力するときは、Eclipseのコンソールに値を入力する
  • 使用したScannerは最後にclose()する

ここまでできるようになると、あらかじめ決められた値だけを使うのではなく、プログラムを実行した人が入力した値によって結果を変えられるようになります。

これまで学んだ「変数」「演算子」「条件分岐」と組み合わせることで、作れるプログラムの幅も広がってきました。

ルミィ
ルミィ

STEP5クリア!
自分で入力した内容によって結果が変わると、プログラムを動かしている感じがしてくるね♪
今まで覚えたことも、どんどん組み合わせて使ってみよう!

次のSTEPへ

次のSTEPでは、同じ処理を何度も繰り返す**「繰り返し処理」**について学びます。

例えば、同じ文章を5回表示したい場合、同じコードを5回書くこともできます。

しかし、回数が100回、1000回になったら大変です。

Javaでは、for文やwhile文を使うことで、同じ処理を効率よく繰り返すことができます。

STEP6「繰り返し処理を使ってみよう」

記事URLをコピーしました