Java入門|2つ以上の数値を入力する

1つずつ入力できれば大丈夫。数を並べて受け取ると、プログラムはもっと実用的になる

これまでの学習では、キーボードから文字列を入力する方法や、入力された文字列を数値に変換して使う方法を見てきました。ここまで理解できると、プログラムは決まった値だけを扱うものではなく、その場で入力された内容を使って動けることがわかってきます。

さらに一歩進むと、入力する数は1つだけとは限らない、という場面が出てきます。たとえば、2つの点数を入力する、2つの金額を入力する、2人分の年齢を入力する、といったように、実際のプログラムでは複数の値を続けて受け取ることがよくあります。こうした場面に対応するためには、2つ以上の数値を順番に読み込む方法を知っておくことが大切です。

考え方そのものは、それほど難しくありません。1つの数値を入力する流れを、必要な回数だけ繰り返しているだけです。ただし、入力された文字列を別々の変数で受け取り、それぞれを数値へ変換し、どの値がどこに入ったのかを整理しながら扱うことが大切になります。

ここでは、2つ以上の数値を入力する基本の流れ、複数の readLine を使う意味、入力順と変数の関係、そして複数入力のコードを読むときの見方を、順番にやさしく整理していきましょう。

2つ以上の数値を入力するとはどういうことか

2つ以上の数値を入力するとは、キーボードから複数回に分けて値を入力し、それぞれを別の変数で受け取ることです。

たとえば、整数を2つ入力するプログラムでは、最初に1つ目の整数を入力し、次に2つ目の整数を入力します。プログラムは、その2回の入力を順番に受け取り、それぞれを別々に保存します。

ここで大事なのは、2つの数値を一度にまとめて受け取るというよりも、1回ずつ順番に受け取っている、という考え方です。入力は Enter キーを押すたびに1回分ずつ確定し、それが順番に読み込まれていきます。

この流れがわかると、複数入力のコードも、1つ入力するコードを少し並べているだけだと理解しやすくなります。

基本の考え方は「1回の入力をくり返す」こと

2つ以上の数値を入力するしくみは、新しい特別なルールが増えるわけではありません。基本は、1回分の入力処理を必要な回数だけくり返しているだけです。

1つの数値を入力するときには、次のような流れでした。

手順内容
1キーボードから1行の文字列を読み込む
2文字列を数値に変換する
3数値型の変数に入れる

2つの数値を入力するときは、この流れを2回分行います。
つまり、文字列の読み込みが2回、数値への変換が2回、変数への格納も2回になります。

このように考えると、複数入力も急に難しくなるわけではありません。1つずつの手順を落ち着いて追えば、十分理解できます。

複数の readLine がある意味

2つ以上の数値を入力するコードでは、readLine を複数回使います。
これは、その回数だけ入力を受けつけるためです。

たとえば、readLine が2つあれば、プログラムは2回入力を待ちます。ユーザーは1回目の入力をして Enter キーを押し、次に2回目の入力をして Enter キーを押します。すると、最初の入力は最初の変数へ、次の入力は次の変数へ、というように順番に読み込まれます。

ここで大切なのは、readLine の数と、入力する回数が対応していることです。
1つの readLine で1回分の入力を受け取るので、2つ入力したいなら readLine も2回必要になります。

最初に入力した値と次に入力した値は別々に保存される

複数の数値を入力するときには、それぞれの値を別々の変数で受け取ります。
そうしないと、どの入力がどの値だったのか区別できなくなってしまうからです。

たとえば、最初の入力を str1、次の入力を str2 に入れるとします。すると、そのあとで str1 を num1 に変換し、str2 を num2 に変換する、というように整理できます。

この流れを意識すると、最初の入力がどこへ行ったのか、次の入力がどこへ行ったのかが見えやすくなります。複数入力では、順番と変数名の対応をていねいに追うことが大切です。

サンプルプログラムで流れを確認する

ファイル名:Sample6.java

import java.io.*;

class Sample6
{
    public static void main(String[] args) throws IOException
    {
        System.out.println("りんごの数とみかんの数を入力してください。");  // 2つの整数の入力をうながします

        BufferedReader br =
        new BufferedReader(new InputStreamReader(System.in));

        String str1 = br.readLine();  // 1つ目の入力を読み込みます
        String str2 = br.readLine();  // 2つ目の入力を読み込みます

        int apple = Integer.parseInt(str1);   // 1つ目の文字列を整数に変換します
        int orange = Integer.parseInt(str2);  // 2つ目の文字列を整数に変換します

        System.out.println("りんごは " + apple + " 個です。");
        System.out.println("みかんは " + orange + " 個です。");
    }
}

実行結果

りんごの数とみかんの数を入力してください。
3
5
りんごは 3 個です。
みかんは 5 個です。

このプログラムでは、最初に 3 を入力し、次に 5 を入力しています。
最初の入力は str1 に入り、それが整数に変換されて apple に入ります。
次の入力は str2 に入り、それが整数に変換されて orange に入ります。

そのため、最後には りんごは 3 個です。 と みかんは 5 個です。 と表示されます。

サンプルプログラムの流れを分解してみる

このプログラムの流れを、段階ごとに整理すると次のようになります。

順番処理役割
1メッセージを表示するユーザーに2つの数値入力をうながす
21回目の readLine最初の入力を文字列として受け取る
32回目の readLine次の入力を文字列として受け取る
4Integer.parseInt(str1)最初の文字列を整数に変換する
5Integer.parseInt(str2)次の文字列を整数に変換する
6結果を表示するそれぞれの整数を出力する

このように整理すると、複数の数値入力も、入力、変換、出力という基本の流れの延長にあることがよくわかります。

入力は1回ずつ順番に処理される

複数入力では、プログラムが一度に全部を理解しているように見えるかもしれませんが、実際には1文ずつ順番に処理しています。

まず最初の readLine が実行されると、プログラムは1回目の入力を待ちます。
そこでユーザーが入力して Enter キーを押すと、その内容が読み込まれます。
次に2つ目の readLine が実行されると、今度は2回目の入力を待ちます。
そして、次の入力が読み込まれます。

このように、入力はコードの順番どおりに、1回ずつ進んでいきます。
ここはとても大切なポイントです。複数の入力があるときほど、コードの上から下への流れを意識することが理解につながります。

文字列として受け取り、あとで整数に変換する

2つ以上の数値を入力するときでも、最初の受け取り方は文字列です。
これは1つの数値を入力するときと同じです。

つまり、3 や 5 のように見える入力でも、readLine で受け取った直後は String 型の文字列です。そのため、そのままでは int型の変数には入れられません。そこで Integer.parseInt を使って、整数へ変換しています。

この流れを整理すると、次のようになります。

段階値の扱い
キーボード入力直後文字列として受け取る
parseInt のあと整数として使えるようになる

この考え方は、1つの数値入力でも、2つ以上の数値入力でも変わりません。

変数名を分けることが大切

複数の値を扱うときには、変数名をわかりやすく分けることがとても大切です。

たとえば、1つ目の入力と2つ目の入力を両方とも同じ変数に入れてしまうと、あとからどちらの値だったのかわかりにくくなります。
そこで、str1 と str2、num1 と num2 のように分けたり、今回の例のように apple と orange のような意味のある名前をつけたりすると、コードが読みやすくなります。

変数名が整理されていると、プログラムの流れも見えやすくなります。
複数の値を扱うほど、名前のわかりやすさが大切になってきます。

図でイメージする2つの数値入力

この図では、1回目の入力が上の変数に入り、2回目の入力が下の変数に入る流れを表しています。
そして、そのあとでそれぞれが整数として使われ、画面に出力される様子がわかるようになっています。

ここで見ておきたいのは、入力が順番に処理され、それぞれが別々の変数で管理されていることです。複数入力では、この順番と対応関係を意識することがとても大切です。

2つ以上の入力でも考え方は同じ

複数入力と聞くと少し難しく感じるかもしれませんが、基本の考え方は変わりません。

  • 入力を受け取る
  • 必要なら型を変換する
  • 変数に入れる
  • その値を使う

この流れを、必要な回数だけくり返しているだけです。
2つなら2回、3つなら3回、というように考えれば大丈夫です。

このようにとらえると、2つ以上の数値入力は特別な話ではなく、これまで学んできた入出力の応用だとわかります。

実用的なプログラムに近づいていく感覚がつかめる

複数の数値を入力できるようになると、プログラムの幅がかなり広がります。
たとえば、2つの数を使った計算、複数のデータの比較、いくつかの条件をもとにした処理など、より実用的なプログラムにつながっていきます。

今の段階では、まず2つの数を順番に入力し、それぞれを正しく受け取れることが大切です。
この基本が身につくと、次に計算や条件分岐を学んだときにも、入力された複数の値を使って処理する流れが自然に理解しやすくなります。

キーボードからの入力は最初少し長く感じることがありますが、1つずつ流れを追えば決して難しすぎるものではありません。複数の値を扱えるようになることで、Javaのプログラムがさらに実践的で面白く見えてくるはずです。