Java入門|入力値を使った計算

入力された値で結果が変わるから、Javaのプログラムはぐっと実践的でおもしろくなる。

これまで見てきた式や演算子の例では、あらかじめ決まった数値や、コードの中で用意した変数を使って計算してきました。けれど、実際のプログラムでは、いつも同じ値だけを扱うとは限りません。ユーザーが入力した数値を使って計算したい場面はとても多くあります。たとえば、2つの数の合計を求めたり、商品の個数から金額を計算したり、入力された年齢をもとに判定をしたりするような場面です。

ここで大切になるのが、キーボードから入力された値を変数に入れ、その変数を式の中で使うという考え方です。これができるようになると、プログラムはただ決まった結果を表示するだけのものではなく、実行するたびに違う結果を出せるようになります。つまり、状況に応じて動く、より実践的なプログラムに近づいていくわけですね。

Javaでは、キーボードから読み取った値を文字列として受け取り、それを必要に応じて整数に変換してから計算に使います。この流れをしっかり理解すると、「入力」「変数」「式」「評価」「出力」という一連のつながりがはっきり見えてきます。

ここでは、入力値を使った計算の基本を、サンプルプログラムとともにやさしく丁寧に見ていきましょう。

キーボードから入力した値を計算に使う

変数を使った式について考えると、変数にはいろいろな値を入れられるので、式の結果は、プログラムを実行したときの変数の値によって変わることがわかります。これはとても大事なポイントです。

たとえば、num1 に 3 が入っているときと、num1 に 10 が入っているときでは、同じ式でも結果が変わります。つまり、変数を使えば、プログラムの動きに変化をもたせることができるのです。

さらに、変数に入る値をキーボードから入力できるようにすれば、使う人がその場で好きな数を入力し、その数をもとに計算できます。これによって、毎回同じ結果ではなく、入力内容に応じた結果を出せるようになります。

今回は、2つの整数を入力し、その差を表示するプログラムを作成します。

ファイル名:Sample3.java

import java.io.*;

class Sample3
{
    public static void main(String[] args) throws IOException
    {
        System.out.println("整数を2つ入力してください。");

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

        // 1つ目と2つ目の入力を文字列として受け取る
        String str1 = br.readLine();
        String str2 = br.readLine();

        // 文字列を整数に変換する
        int num1 = Integer.parseInt(str1);
        int num2 = Integer.parseInt(str2);

        // 入力した2つの数の差を表示する
        System.out.println("2つの数の差は " + (num1 - num2) + " です。");
    }
}

実行するとどうなるのか

たとえばこのプログラムを実行して、次のように入力したとします。

整数を2つ入力してください。
8
3
2つの数の差は 5 です。

この結果からわかるように、入力した値がそのまま計算に使われています。今回は 8 と 3 を入力したので、8 - 3 の結果である 5 が表示されました。

もちろん、別の数を入力すれば結果も変わります。

整数を2つ入力してください。
20
7
2つの数の差は 13 です。

このように、入力値によって出力結果が変わるのが、入力を使ったプログラムの大きな特徴です。

このプログラムの流れを整理しよう

このサンプルプログラムでは、処理の流れを順番に追うと理解しやすくなります。

順番処理内容説明
1メッセージを表示する整数を2つ入力してください、と案内する
2キーボード入力を受け取る準備をするBufferedReader を使って入力を読み取れるようにする
32つの値を文字列で受け取るreadLine で1行ずつ入力を読む
4整数に変換するInteger.parseInt で文字列を int にする
5計算するnum1 - num2 を評価する
6結果を表示する計算結果を画面に出力する

この流れを見ると、入力された値がそのままいきなり計算されるわけではなく、文字列として受け取り、整数に変換してから式に使っていることがわかります。

なぜ文字列を整数に変換するのか

ここはとても大切なので、少し丁寧に見ておきましょう。

キーボードから入力された値は、最初は文字として読み込まれます。たとえば、8 と入力したとしても、Javaにとって最初は数値の 8 ではなく、文字列の 8 です。

そのため、そのままでは数値としての計算に使えません。そこで、次のようなコードで文字列を整数に変換しています。

int num1 = Integer.parseInt(str1);
int num2 = Integer.parseInt(str2);

この Integer.parseInt は、文字列を int 型の整数に変換するための機能です。

たとえば、

入力された文字列変換後の整数
88
1515
100100

というように変換されます。

もしこの変換をせずに、そのまま文字列として扱うと、数値の計算とは違う動きになってしまいます。特に + を使う場合は、足し算ではなく文字列の連結になることがあるため注意が必要です。

入力値を使うと、なぜプログラムの幅が広がるのか

これまで、コードの中に直接書いた数値だけで計算する場合は、いつも同じ結果しか出ませんでした。たとえば 3 + 4 と書いてあれば、何回実行しても結果は 7 です。

でも、入力値を使うようになると、実行するたびに違う数を扱えるようになります。これによって、プログラムの使い道がぐっと広がります。

たとえば、次のような処理はどれも入力値を使う考え方が土台になります。

入力するもの計算や処理
合計を求める2つの金額足し算する
差を求める2つの数引き算する
面積を求める縦と横の長さ掛け算する
年齢判定生まれ年現在年と比較する

つまり、入力値を使うことで、プログラムが「固定された結果を表示するもの」から、「使う人に応じて結果が変わるもの」へ進化するのです。

この図では、まずキーボードから 8 と 3 が入力され、その値が num1 と num2 という変数に入る様子を示しています。そのあと、num1 - num2 という式が評価され、結果の 5 が得られる流れを表しています。

この図からわかるのは、入力された値が変数に入り、その変数の値が式の中で使われているということです。Javaは、入力された値を受け取って終わりではなく、それを変数に保存し、その変数を使って計算しています。ここがとても大切です。

式は数式だけではない

ここで、式についてもう少し考えを広げてみましょう。

式というと、

1 + 2
3 * 4

のような数式を思い浮かべやすいですが、Javaではそれだけではありません。

たとえば、

num1

5

も、それだけで式と考えることができます。

これはとても大事な考え方です。

たとえば、5 という式の値は 5 です。これはわかりやすいですね。

では、

num1

という式の値は何でしょうか。これは、変数 num1 に入っている値です。num1 に 8 が入っていれば、この式の値は 8 ですし、num1 に 20 が入っていれば、この式の値は 20 です。

つまり、変数名だけでも、それは値をもつ式なのです。

小さな式を組み合わせて大きな式になる

Javaの式は、小さな式を組み合わせて大きな式を作ることができます。

たとえば、

num1 - num2

という式は、

  • num1 という式
  • num2 という式

を - という演算子で組み合わせたものです。

同じように、

num1 + 5

という式は、

  • num1 という式
  • 5 という式

を + で結びつけた形です。

この考え方を表にすると、次のようになります。

構成式の値
5単独の式5
num1単独の式num1 に入っている値
num1 + 5小さな式を + で組み合わせた式num1 の値に 5 を足した値
num1 - num2小さな式を - で組み合わせた式num1 の値から num2 の値を引いた値

このように見ると、式は「大きなかたまり」であると同時に、「小さな式の組み合わせ」でもあることがわかります。

この図では、num1 も 5 もそれぞれ独立した式であり、その2つが + で結びつくことで、num1 + 5 というより大きな式になることを表しています。

これは、Javaの式を読むときにとても役立つ考え方です。複雑な式が出てきても、いきなり全体を見るのではなく、まずは小さな式に分けて考えると理解しやすくなります。

サンプルプログラムを細かく読み解こう

ここで、今回のサンプルを一行ずつやさしく見ていきましょう。

入力の案内を表示する

System.out.println("整数を2つ入力してください。");

まず、使う人に対して入力をうながすメッセージを表示しています。何を入力すればよいのかがわかるようにするためですね。

入力を受け取る準備をする

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

これはキーボードからの入力を受け取るための準備です。今の段階では、少し長い書き方だなと感じても大丈夫です。ここでは、入力を読むために必要な決まり文句のひとつとして覚えておくとよいでしょう。

入力された内容を文字列として読む

String str1 = br.readLine();
String str2 = br.readLine();

この2行で、1つ目と2つ目の入力を1行ずつ読み込んでいます。読み込んだ内容は String 型なので、文字列として保存されます。

文字列を整数に変換する

int num1 = Integer.parseInt(str1);
int num2 = Integer.parseInt(str2);

ここで、読み込んだ文字列を整数に変えています。これによって、数値として計算できるようになります。

計算結果を表示する

System.out.println("2つの数の差は " + (num1 - num2) + " です。");

ここでは、num1 - num2 という式を評価し、その結果を文字列とつなげて表示しています。丸かっこを付けているので、先に引き算が行われ、その結果が出力されます。

入力値を使った計算で意識したいこと

入力値を使うときは、次のポイントを意識すると理解しやすくなります。

ポイント内容
入力値は最初は文字列readLine で読んだ値は String 型になる
計算には変換が必要Integer.parseInt で int に変える
変数に入れてから使う入力値を変数に保存して式に使う
結果は入力内容で変わる実行するたびに違う結果になる

これがわかると、入力・変数・演算・出力がひとつながりの流れとして見えてきます。

入力値を使うことでプログラムが生きたものになる

入力値を使った計算は、Javaの学習の中でもとても大切なステップです。なぜなら、ここからプログラムが「決められたものを表示するだけ」ではなく、「その場の入力に応じて動くもの」になるからです。

たとえば、電卓のようなプログラムも、ユーザーが入力した値を受け取り、その値をもとに計算することで成り立っています。フォームに入力した数字から合計を出す仕組みも、考え方は同じです。

つまり今回の内容は、単なる練習ではなく、実際のアプリケーションにつながる基本でもあります。入力された値を変数に入れ、その変数を式で使い、評価された結果を表示する。この流れをしっかり理解できると、Javaでできることが一気に広がっていきます。