Java入門|lengthでコードを簡単にする

lengthを使えば、配列の数に合わせてコードが自然に動く

配列を使うと、同じ種類のデータをまとめて扱えるようになりますね。さらに便利に使うために、ぜひ覚えておきたいのが length です。

これまでの配列のプログラムでは、for文の中に 5 のような固定の数を書いて、繰り返し回数を決めることがありました。もちろんそれでも動きますが、配列の要素数が変わるたびに、その数字を書き直さなければならなくなります。こうした書き方は、あとで修正するときに意外と手間がかかります。

そこで役立つのが、配列の長さを表す length です。これを使えば、その配列が何個の要素を持っているのかをJavaが教えてくれるので、繰り返し回数を自動的に合わせられるようになります。ここでは、配列の長さの調べ方、length の使い方、そしてなぜ length を使うとコードが楽になるのかを、やさしく丁寧に見ていきましょう。

配列の長さとは何か

配列には、あらかじめ「何個の要素を持っているか」が決まっています。
この要素の数のことを、配列の長さといいます。

たとえば、次の配列を見てみましょう。

int[] data = {15, 28, 34, 21, 40};

この配列には、5つの整数が入っています。
つまり、この配列の長さは 5 です。

この「5」という数をJavaで調べたいときに使うのが、length です。

配列の長さは .length で調べられる

Javaでは、配列変数のあとに .length を付けると、その配列が持っている要素数を表せます。

書き方はとてもシンプルです。

配列変数名.length

たとえば、data という配列なら次のように書けます。

data.length

これで、data が持っている要素数を表せます。
先ほどの配列なら、data.length の値は 5 になります。

length を使った基本の例を見てみよう

まずは、配列の長さを表示するシンプルなプログラムから見てみましょう。
ここでは、5日分の読書時間を配列に入れて表示するプログラムを作成します。

ファイル名:Sample7.java

class Sample7
{
    public static void main(String[] args)
    {
        int[] reading = {30, 45, 20, 50, 35};   // 5日分の読書時間を用意する

        for(int i = 0; i < 5; i++){
            System.out.println((i + 1) + "日目の読書時間は " +
                               reading[i] + "分です。");
        }

        System.out.println("読書記録は全部で " + reading.length +
                           "日分あります。");   // 配列の長さを表示する
    }
}

実行結果

1日目の読書時間は 30分です。
2日目の読書時間は 45分です。
3日目の読書時間は 20分です。
4日目の読書時間は 50分です。
5日目の読書時間は 35分です。
読書記録は全部で 5日分あります。

このプログラムでは、最後の行で reading.length を使っています。
その結果、配列の中に要素がいくつあるのかを、そのまま表示できます。

.length は何を返しているのか

ここで、reading.length が何を表しているのかを整理してみましょう。

意味
reading[0]1つ目の要素
reading[1]2つ目の要素
reading[2]3つ目の要素
reading.length配列全体の要素数

つまり、reading[0] のような書き方は「中の値」を取り出すもので、reading.length は「配列の大きさ」を表すものです。

ここは少し似て見えるので、混同しないようにしたいところです。

この図では、配列の中に 5 個の箱があることを表しています。
それぞれの箱には 0 から 4 までの添字が付いていますが、配列全体として見たときの要素数は 5 です。

つまり、

  • 最後の添字は 4
  • 配列の長さは 5

という関係になります。
この違いはとても大切なので、しっかり意識しておきましょう。

これまでの for文では固定の数字を書いていた

これまでの学習では、for文の条件に 5 のような固定の数を書いていたことがありました。

for(int i = 0; i < 5; i++){
    System.out.println(reading[i]);
}

この書き方でも、要素数が 5 の配列なら正しく動きます。
ただし、この方法には少し困る点があります。

たとえば、あとでデータが5個から7個に増えたとします。すると、配列の中身だけではなく、for文の条件も書き直さなければなりません。

もし修正を忘れてしまうと、

  • 一部の要素が表示されない
  • 不自然なコードになる
  • 修正漏れの原因になる

といった問題が起こりやすくなります。

length を使うと for文がもっと自然になる

そこで、for文の条件にも length を使うと便利です。

for(int i = 0; i < reading.length; i++){
    System.out.println(reading[i]);
}

この書き方なら、配列の要素数に合わせて繰り返し回数が自動的に決まります。

つまり、

  • 要素が5個なら5回
  • 要素が7個なら7回
  • 要素が10個なら10回

というように、配列に合わせて自然に動いてくれるのです。

length を使った実用的な例を見てみよう

今度は、for文の条件に length を使った例を見てみましょう。
ここでは、1週間の水やり回数を記録するプログラムに変えて説明します。

ファイル名:Sample8.java

class Sample8
{
    public static void main(String[] args)
    {
        int[] watering = {1, 2, 1, 3, 2};

        for(int i = 0; i < watering.length; i++){   // 配列の長さを使って繰り返す
            System.out.println((i + 1) + "日目の水やり回数は " +
                               watering[i] + "回です。");
        }

        System.out.println("記録の日数は " + watering.length +
                           "日です。");
    }
}

実行結果

1日目の水やり回数は 1回です。
2日目の水やり回数は 2回です。
3日目の水やり回数は 1回です。
4日目の水やり回数は 3回です。
5日目の水やり回数は 2回です。
記録の日数は 5日です。

このプログラムでは、繰り返し条件にも、最後の表示にも length を使っています。
そのため、配列の中身が変わって要素数が増減しても、for文の条件をいちいち修正しなくて済みます。

たとえば要素数が変わってもそのまま使える

length の便利さは、配列の中身を変更したときによくわかります。

たとえば、次のように要素数を増やしたとします。

int[] watering = {1, 2, 1, 3, 2, 2, 1};

このとき、for文が

for(int i = 0; i < watering.length; i++)

となっていれば、何も書き直さなくても 7 回繰り返してくれます。

でも、もし

for(int i = 0; i < 5; i++)

のままだと、7個の要素があるのに最初の5個しか処理されません。

この違いはかなり大きいですね。
つまり、length を使うことで、配列の変化に強いコードになるのです。

固定の数字を書く方法と length を使う方法の違い

2つの書き方を比べてみましょう。

書き方特徴
i < 5要素数が変わると修正が必要
i < 配列変数名.length要素数が変わってもそのまま使いやすい

たとえば、次の2つを比べると違いがはっきりします。

固定の数字を書く方法

for(int i = 0; i < 5; i++){
    System.out.println(watering[i]);
}

length を使う方法

for(int i = 0; i < watering.length; i++){
    System.out.println(watering[i]);
}

後者のほうが、配列の実際の大きさにぴったり合っていて、より安全で読みやすい書き方です。

なぜ length を使うと修正が楽になるのか

プログラムでは、あとからデータの個数を変えたくなることがよくあります。
たとえば、

  • 5人分のデータを 8人分に変える
  • 1週間分を 1か月分に変える
  • 3個の商品を 6個に増やす

といったことは珍しくありません。

このとき、コードのあちこちに 5 や 3 などの数字が直接書かれていると、どこを修正すればよいか探すのが大変になります。しかも、数字の意味が同じとは限らないので、見つけにくいこともあります。

一方で、配列の長さを表すところにすべて length を使っていれば、配列データそのものを変えるだけで、繰り返し回数も自動的に変わります。

これは、保守しやすいコードを書くうえでとても大切な考え方です。

length を使うときに意識したいポイント

length を使うときには、いくつか意識しておきたい点があります。

ポイント内容
length は要素数を表す最後の添字ではない
最後の添字は length - 1添字は 0 から始まるため
for文と相性がよい繰り返し回数を自動で合わせられる
修正しやすくなる要素数が変わっても対応しやすい

特に大切なのは、length は最後の添字ではなく、要素数そのものだという点です。

たとえば、要素数が 5 なら、

  • length は 5
  • 最後の添字は 4

です。
ここを混同しないように注意しましょう。

添字と長さの違いを表で整理しよう

この違いは、表で見るとかなりわかりやすいです。

配列の要素数length の値使える添字
330, 1, 2
550, 1, 2, 3, 4
770, 1, 2, 3, 4, 5, 6

この表からもわかるように、length は「何個あるか」を表す数で、添字は 0 から始まります。

そのため、for文では

i < 配列変数名.length

と書くのがちょうどよいわけです。
これなら、i は最後に length - 1 まで進みます。

図で for文との関係を見てみよう

この図は、watering.length が 5 なので、for文の条件 i < watering.length によって、i は 0 から 4 まで変化することを表しています。

つまり、配列に実際に存在する要素だけを順番に処理しているわけです。
固定の数字を使わなくても、配列の大きさに合わせて自然にループできるところが、length の大きな便利さです。

配列を扱うなら length はとても大切

配列の学習では、値の代入や取り出しに目が向きやすいですが、実際のプログラムでは「何個あるのか」を知ることも同じくらい大切です。
そのために使うのが length です。

length を使うと、

  • 配列の要素数がすぐわかる
  • 繰り返し回数を自動で合わせられる
  • 配列の中身を変更しても修正が少なくて済む
  • より読みやすく、扱いやすいコードになる

という大きなメリットがあります。

特に、for文と組み合わせる書き方は、配列を使うJavaプログラムで何度も登場します。ここでしっかり慣れておくと、この先の集計処理や平均計算、検索処理などもずっと書きやすくなります。

length は配列に合わせてコードを自然にしてくれる

配列の要素数を固定の数字で書く方法は、最初はわかりやすく感じるかもしれません。
でも、データの数が変わるたびに数字を書き直すのは、手間がかかるうえにミスの原因にもなります。

その点、length を使えば、配列の長さに合わせてコードが自然に動くようになります。
これは、Javaで配列を使うときのとても基本的で、とても実用的な考え方です。

配列を扱うときは、単に値を並べるだけでなく、その配列が何個の要素を持っているかを length で表すという習慣をつけておくと、コードがぐっと書きやすくなります。