Java入門|変数を使った演算

変数を使いこなせるようになると、Javaの計算は「数字の練習」から「プログラムの処理」へ変わっていきます。

ここまで式や演算子の基本を見てきましたが、実際のJavaプログラムでは、いつも 1 や 2 のような決まった数だけを使って計算するわけではありません。多くの場合は、いったん値を変数に入れておき、その変数を使って計算を進めていきます。たとえば、商品の個数、点数、年齢、合計金額など、あとから変わる値を扱うときには、変数が欠かせません。

そして、Javaではこの変数も、式の中でオペランドとして使うことができます。つまり、数そのものだけでなく、変数に入っている値を使って演算できるわけです。ここがわかるようになると、プログラムらしい処理がぐっと見えてきます。

さらに、変数を使った演算では、計算した結果を別の変数に入れたり、自分自身の値をもとに新しい値へ更新したりできます。これはJavaのプログラムを書くうえでとても大切な考え方です。たとえば、合計を求める、残りの数を減らす、回数を1ずつ増やす、といった処理は、どれも変数を使った演算の考え方が土台になっています。

ここでは、変数を使った演算のしくみを、サンプルプログラムと図を交えながら、やさしく丁寧に見ていきましょう。

いろいろな演算をする

式の中で、演算の対象となるものは、1 や 2 のような固定された数だけではありません。Javaでは、変数に入っている値も演算の対象にできます。

たとえば、2つの変数に入っている数を足し算したり、ある変数の値を1増やしたりすることができます。これは、実際のプログラムでとてもよく使う書き方です。

ファイル名:Sample2.java

class Sample2
{
    public static void main(String[] args)
    {
        int apples = 4;
        int oranges = 5;
        int total = apples + oranges;

        // 変数に入っている値を表示する
        System.out.println("りんごの数は " + apples + " 個です。");
        System.out.println("みかんの数は " + oranges + " 個です。");
        System.out.println("全部で " + total + " 個あります。");

        // りんごを1個増やす
        apples = apples + 1;

        System.out.println("りんごを1個増やすと " + apples + " 個になります。");
    }
}

実行結果

このプログラムを実行すると、次のような表示になります。

りんごの数は 4 個です。
みかんの数は 5 個です。
全部で 9 個あります。
りんごを1個増やすと 5 個になります。

この結果を見ると、変数に入っている値どうしを使って計算できていることがわかります。さらに、最後では apples の値そのものが更新されていることも確認できます。

このプログラムで大切な2つの式

このサンプルの中で特に大切なのは、次の2つの式です。

int total = apples + oranges;

apples = apples + 1;

この2つは、どちらも変数を使った演算の基本を表しています。ひとつずつ見ていきましょう。

変数どうしを足して別の変数に入れる

まずは、こちらの式です。

int total = apples + oranges;

この式では、apples と oranges という2つの変数に入っている値を足し算しています。ここで大切なのは、Javaが変数名そのものを足しているのではなく、変数の中に記憶されている値を取り出して計算している、ということです。

今回の例では、

  • apples には 4
  • oranges には 5

が入っています。ですから、

apples + oranges

は、実際には

4 + 5

として評価され、結果は 9 になります。そして、その 9 が total に代入されます。

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

変数名入っている値
apples4
oranges5
total9

つまりこの式は、2つの変数の値を足し、その結果を別の変数に保存するための書き方です。

同じ変数に新しい値を入れ直す

次に見ておきたいのが、こちらの式です。

apples = apples + 1;

初めて見ると、「左側と右側で apples が出てきていて不思議だな」と感じるかもしれません。数学の等式のように見ると、少し変わった書き方に見えますよね。

でも、Javaの = は「等しい」という意味ではありません。これは、右側の値を左側の変数に代入するという意味です。

この式の流れは、次のようになります。

  1. 右辺の apples + 1 を計算する
  2. その結果を左辺の apples に代入する

今回の例では、最初 apples に 4 が入っています。ですから、

apples + 1

4 + 1

として評価され、結果は 5 になります。そして、その 5 があらためて apples に代入されます。

つまり、もとの値を使って、新しい値に更新しているのです。

この図の左側では、apples に入っている 4 と、oranges に入っている 5 を足し、その結果 9 が total に入る流れを示しています。右側では、apples に入っている 4 に 1 を足し、その結果 5 をもう一度 apples に入れる流れを示しています。

この図からわかるのは、変数名そのものが変わるのではなく、変数の中の値が使われて計算されるということです。そして、計算結果は別の変数に入れることもできれば、同じ変数に入れ直して更新することもできます。

変数は「箱」、演算は「箱の中身」で行う

変数を理解するときは、変数を「値を入れておく箱」と考えるとわかりやすいです。

たとえば、

int apples = 4;

は、apples という名前の箱に 4 を入れた、と考えられます。

そのうえで、

int total = apples + oranges;

と書くと、apples という箱の中の 4 と、oranges という箱の中の 5 を取り出して足し算し、その結果を total という新しい箱に入れることになります。

この考え方に慣れると、変数を使った演算がとても自然に見えてきます。

代入と等号は意味が違う

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

数学では、= は「左と右が等しい」という意味で使います。でもJavaでは、= は代入を表します。つまり、「右側の値を左側へ入れる」という意味です。

この違いを表にしておくと、整理しやすくなります。

記号数学での意味Javaでの意味
=左右が等しい右辺の値を左辺の変数に代入する

そのため、

apples = apples + 1;

は数学の感覚で読むのではなく、

  • 右側を先に計算する
  • その結果を左側の変数に入れる

という順番で読むことが大切です。

右辺が先に評価される

Javaでは、代入文を書くとき、まず右辺が評価され、そのあと左辺に代入されます。これもとても重要なルールです。

たとえば、

apples = apples + 1;

なら、先に右辺の apples + 1 が計算されます。その時点では apples の値はまだ 4 です。だから 4 + 1 で 5 になります。そして最後に、その 5 が apples に入ります。

この順番を意識できるようになると、変数の更新処理が読みやすくなります。

変数を使った演算は実用的な処理の基本になる

変数を使った演算は、単なる練習問題ではありません。実際のプログラムでは、次のような場面でとてもよく使います。

場面
合計を求める商品Aと商品Bの合計金額を出す
回数を増やすボタンを押した回数を1増やす
在庫を減らす商品が売れたら在庫数を1減らす
点数を集計する各科目の点数を足して合計点を出す

たとえば、買い物かごの合計金額を出すときには、複数の商品の金額を変数に入れておき、それらを足し算して合計を求めます。また、ゲームのスコアを増やすときには、今の得点に新しい点数を足して更新します。こうした処理は、どれも今回の考え方と同じです。

今回のサンプルを細かく読み解こう

ここで、サンプル全体の流れを順番に追ってみましょう。

1. 変数を用意する

int apples = 4;
int oranges = 5;

ここでは、りんごの数とみかんの数をそれぞれ変数に入れています。どちらも int 型なので、整数を入れるための変数です。

2. 合計を計算する

int total = apples + oranges;

apples と oranges の値を足し算し、その結果を total に入れています。

3. 値を表示する

System.out.println("りんごの数は " + apples + " 個です。");
System.out.println("みかんの数は " + oranges + " 個です。");
System.out.println("全部で " + total + " 個あります。");

ここでは、変数の値をそのまま画面に表示しています。式の評価結果だけでなく、変数の中身も文字列と組み合わせて表示できるのがわかります。

4. 変数の値を更新する

apples = apples + 1;

今の apples の値に 1 を足し、その結果をもう一度 apples に入れています。

5. 更新後の値を表示する

System.out.println("りんごを1個増やすと " + apples + " 個になります。");

ここで表示される apples は、更新後の値です。つまり 5 が表示されます。

よくあるつまずきポイント

変数を使った演算では、初学者がつまずきやすいポイントがいくつかあります。ここで確認しておくと安心です。

変数名を計算しているわけではない

apples + oranges と書くと、文字の並びを操作しているように感じるかもしれませんが、実際には変数名ではなく、その中に入っている値を使っています。

= を等号だと思ってしまう

これはかなりよくあるつまずきです。Javaの = は代入なので、右辺を計算して左辺へ入れると考えましょう。

値が更新されることを忘れてしまう

apples = apples + 1;

のあと、apples の値はもとの 4 ではなく 5 になります。変数の値は固定ではなく、代入によって変わることがある、という感覚を持っておくことが大切です。

演算の考え方を広げてみよう

今回は足し算を中心に見ましたが、変数を使えば引き算や掛け算、割り算も同じようにできます。

たとえば、次のような式も書けます。

int price = 120;
int count = 3;
int amount = price * count;

この場合は、price に入っている 120 と、count に入っている 3 を掛け算して、結果の 360 を amount に入れています。

このように、変数をオペランドとして使えるようになると、プログラムで扱える内容が一気に広がります。数が変わっても、変数に入れ直せば同じ式を使えるので、より柔軟なプログラムが作れるようになります。

覚えておきたいポイントを整理しよう

変数を使った演算では、次の考え方がとても大切です。

ポイント内容
変数もオペランドにできる数値だけでなく、変数の値を使って演算できる
右辺を先に計算する代入文では右辺が先に評価される
= は代入を表す数学の等号とは意味が違う
同じ変数を更新できるnum = num + 1 のように自分の値をもとに更新できる

この考え方がしっかり身につくと、これから学ぶインクリメント演算子や代入演算子の理解もとてもスムーズになります。変数を使った演算は、Javaの基本の中でも特に実践的で、今後何度も使っていく大切な内容です。