Java超|配列と変数の違い

1つの値なら変数、同じ種類のデータが並ぶなら配列。
配列を理解すると、Javaのデータ管理は「バラバラの記録」から「番号付きの隊列」へ進化する。

Javaを学習していると、最初は変数を使って値を保存します。

たとえば、1人分の点数、1つの年齢、1つの合計点のように、単独の値を扱うときは変数で十分です。

int score = 80;

このように書くと、score という名前の入れ物に 80 という値を保存できます。

しかし、実際のプログラムでは、1つの値だけではなく、同じ種類のデータをたくさん扱いたい場面が出てきます。

たとえば、5人分の修行点数、7日分の気温、12か月分の売上、対戦相手ごとの得点記録などです。

このような値を1つずつ別々の変数で管理しようとすると、変数名がどんどん増えてしまいます。

int score1 = 80;
int score2 = 60;
int score3 = 22;
int score4 = 90;
int score5 = 35;

5個くらいならまだ見えますが、これが30人分、50人分、100人分になると、コードはかなり読みにくくなります。
さらに、合計を求めたり、平均を出したり、最大値を探したりする処理も書きづらくなります。

そこで活躍するのが配列です。

配列は、同じ型の値を複数まとめて扱える仕組みです。

変数が「1つの値を入れる小さな入れ物」だとすれば、配列は「同じ種類の値を番号付きで並べて入れられる棚」のようなものです。

ドラゴンボール風にたとえると、変数は「1人の戦士の戦闘力を記録するスカウター表示」です。
一方、配列は「複数の戦士の戦闘力を番号順に並べた訓練記録パネル」です。

1人分だけなら変数で十分です。
でも、戦士全員の修行点数をまとめて管理したいなら、配列を使ったほうが整理しやすくなります。

この記事では、配列とは何か、変数とどう違うのか、添字とは何か、どんな場面で配列が便利なのかを、ドラゴンボール風の世界観にたとえながら、やわらかく整理していきます。

変数は1つの値を入れる入れ物

まず、変数の役割から確認しておきましょう。

変数は、1つの名前に対して1つの値を保存するための仕組みです。

int power = 9000;

この場合、power という変数には 9000 という値が入っています。

変数名入っている値
power9000

変数は、単独の値を扱うときにとても便利です。

たとえば、次のような値です。

扱いたい値変数が向いている理由
1人の点数1つの値だけだから
1日の気温単独の数値だから
合計点計算結果を1つ保存するから
名前1人分の文字列だから
現在のHP1つの状態を表すから

ドラゴンボール風にたとえると、変数は「1人の戦士の現在の戦闘力を表示するスカウター」です。

悟空風のオリジナル戦士の戦闘力だけを見たいなら、1つの変数で十分です。

int gokuTypePower = 9000;

このように、1つの値を保存するなら変数が分かりやすいです。

ただし、複数の戦士の戦闘力をまとめて扱いたい場合は、変数だけでは少し大変になります。

たくさんの値を変数だけで管理すると大変になる

たとえば、5人分の修行点数を変数で管理するとします。

int score1 = 80;
int score2 = 60;
int score3 = 22;
int score4 = 90;
int score5 = 35;

このように書けば、5人分の点数を保存できます。

しかし、問題はここからです。

もし点数の合計を求めたいなら、次のように全部の変数名を書かなければなりません。

int sum = score1 + score2 + score3 + score4 + score5;

5人分ならまだ何とか書けます。
しかし、50人分ならどうでしょうか。

score1、score2、score3……score50 まで宣言し、それらを全部足す必要があります。

これはかなり大変です。

問題点内容
コードが長くなる似たような変数宣言が大量に並ぶ
ミスが起きやすいscore23 を score32 と書き間違える可能性がある
処理を書きにくい合計や平均を求める処理が長くなる
管理しにくい人数が増減したときに修正が多くなる
繰り返し処理と組み合わせにくい変数名が別々なので順番に扱いにくい

ドラゴンボール風にたとえると、50人分の修行記録を、全部別々の紙に書いて床に並べているようなものです。

1枚ならすぐ見つかります。
でも、50枚になると探すのも大変です。
合計点を出すには、1枚ずつ拾って確認しなければなりません。

こういう場面で、配列がとても役立ちます。

配列は同じ型の値をまとめて扱う入れ物

配列は、同じ型の値を複数まとめて保存するための仕組みです。

変数は1つの値を保存します。
配列は、同じ型の値を複数並べて保存できます。

入れ物の種類保存できる値
変数1つの値
配列同じ型の値を複数

たとえば、5人分の点数を配列で考えると、次のようなイメージになります。

位置
080
160
222
390
435

配列では、値が横一列に並んでいます。

そして、それぞれの値には位置を表す番号が付いています。

この番号を添字と呼びます。

ドラゴンボール風にたとえると、配列は「戦士たちの修行点数を番号付きで並べた訓練記録パネル」です。

0番の枠には80点。
1番の枠には60点。
2番の枠には22点。
3番の枠には90点。
4番の枠には35点。

このように、同じ種類のデータを1つのまとまりとして管理できます。

変数と配列の大きな違い

変数と配列は、どちらも値を保存するための仕組みです。

ただし、向いている場面が違います。

項目変数配列
保存できる値の数1つ複数
向いている場面単独の値を扱うとき同じ型の値をまとめて扱うとき
取り出し方変数名で取り出す配列名と添字で取り出す
1人の点数、合計点、現在HP点数一覧、気温記録、月ごとの売上
繰り返し処理との相性値が多いと扱いにくいfor文で順番に処理しやすい

1人分の点数なら、変数で十分です。

int score = 80;

でも、5人分、30人分、100人分の点数を扱うなら、配列のほうが自然です。

配列を使うと、1つの名前で複数の値をまとめて管理できます。

ドラゴンボール風にたとえると、変数は「1人の戦士の記録カード」です。
配列は「複数の戦士の記録カードを番号順に並べたカード棚」です。

1人だけを見るならカード1枚で十分です。
全員分を順番に見たいなら、番号付きの棚に並べたほうがずっと扱いやすくなります。

図:変数は1つ、配列は複数をまとめる

この図が示していること

この図では、変数と配列の違いを視覚的に示しています。

左側の変数は、score という1つの名前に対して、80という1つの値を保存しています。
1人分の修行点数を扱うような場面では、変数で十分です。

右側の配列は、1つのまとまりの中に、80、60、22、90、35という複数の値を並べています。
それぞれの値には 0、1、2、3、4 という添字が付いています。

ここから分かることは、配列は「同じ種類のデータを番号付きでまとめて扱う仕組み」だということです。

添字は配列の場所を表す番号

配列を理解するときに、とても大切なのが添字です。

添字は、配列の中のどの場所を使うのかを表す番号です。

用語意味
添字配列の中の位置を表す番号
要素配列の中に入っている1つ1つの値

たとえば、次のような配列を考えます。

添字要素
080
160
222
390
435

この場合、添字0の場所には80が入っています。
添字1の場所には60が入っています。
添字2の場所には22が入っています。

Javaの配列では、最初の添字は 0 から始まります。

ここはとても大切です。

日常の感覚では、1番目、2番目、3番目と数えることが多いです。
しかし、Javaの配列では、最初の要素は0番です。

日常の感覚Javaの添字
1番目0
2番目1
3番目2
4番目3
5番目4

ドラゴンボール風にたとえると、訓練記録パネルの最初の枠には、1番ではなく0番の番号札が付いています。

最初は少し不思議に感じるかもしれません。
でも、Javaの配列では「最初は0番」と覚えておくと、後の学習がかなり楽になります。

配列名と添字をセットで考える

配列の値を扱うときは、配列名と添字をセットで考えます。

たとえば、scores という配列があるとします。

添字scores の中身
080
160
222
390
435

このとき、添字0の値を取り出したいなら、scores の0番を見るという考え方になります。

scores[0]

添字3の値を取り出したいなら、次のように考えます。

scores[3]
書き方意味値の例
scores[0]scores の0番目80
scores[1]scores の1番目60
scores[2]scores の2番目22
scores[3]scores の3番目90
scores[4]scores の4番目35

変数なら、変数名だけで値を取り出します。

score

しかし、配列では、配列名だけでは「どの場所の値か」が分かりません。
そのため、添字を使って場所を指定します。

ドラゴンボール風にたとえると、scores は訓練記録パネル全体の名前です。
scores[0] は、そのパネルの0番枠にある記録です。
scores[3] は、3番枠にある記録です。

つまり、配列は「配列名 + 添字」で中の値を指定するのが基本です。

配列が便利な理由

配列の便利さは、単に値をまとめて保存できることだけではありません。

同じ型の値をまとめて持てるからこそ、繰り返し処理と組み合わせやすくなります。

たとえば、点数が配列に入っていると、先頭から順番に処理できます。

できること説明
全員分を順番に表示する配列の先頭から最後までたどればよい
合計を求める値を順番に足していける
平均を求める合計と件数を組み合わせればよい
最大値や最小値を探す1つずつ比較できる
条件に合う値を探す繰り返しながら調べられる

配列を使うメリットを整理すると、次のようになります。

メリット内容
同じ型の値をまとめられる点数、売上、気温などをひとまとまりで管理できる
名前を大量に作らなくてよい1つずつ別の変数名を付けなくてよい
繰り返し処理と組み合わせやすいfor文で順番に処理しやすい
コードが読みやすくなるデータのまとまりがはっきりする
保守しやすいデータ数が増えても整理しやすい

ドラゴンボール風にたとえると、配列は「戦士たちの修行点数を1つの記録パネルにまとめる」ようなものです。

1人ずつ別の紙に書くよりも、順番に見たり、合計したり、最高点を探したりするのがずっと楽になります。

配列は繰り返し処理と相性がよい

配列がJavaで重要なのは、繰り返し処理と組み合わせやすいからです。

配列の中には、同じ型の値が順番に並んでいます。
だから、先頭から順番に見ていく処理がとても自然です。

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

このように、for文の変数 i を添字として使えば、配列の値を順番に取り出せます。

i の値取り出す値
0scores[0]
1scores[1]
2scores[2]
3scores[3]
4scores[4]

これは、6章で学んだ繰り返し処理と深くつながっています。

for文は、0、1、2、3、4 のように番号を順番に進めるのが得意です。
配列は、0番、1番、2番、3番、4番のように添字で場所を指定します。

つまり、for文のカウンタ変数と、配列の添字はとても相性がよいのです。

ドラゴンボール風にたとえると、配列は「番号付きの修行記録パネル」です。
for文は、そのパネルを0番から順番に確認していく巡回役です。

この2つを組み合わせると、全員分の修行点数を効率よく確認できます。

図:配列は添字で場所を管理する

この図が示していること

この図では、配列が添字によって場所を管理していることを示しています。

scores という配列の中に、80、60、22、90、35 という値が順番に入っています。
それぞれの値には、0、1、2、3、4 という添字が付いています。

scores[0] は0番の値なので80を表します。
scores[3] は3番の値なので90を表します。

ここから分かることは、配列を使うときは「配列名」と「添字」をセットで考える必要があるということです。

また、Javaでは最初の添字が0であることも、とても重要なポイントです。

配列は同じ型だけをまとめる

配列で大切なのは、同じ型の値だけをまとめるという点です。

整数を入れる配列なら、整数を入れます。
小数を入れる配列なら、小数を入れます。
文字列を入れる配列なら、文字列を入れます。

配列の種類入れられるもの
int型の配列整数
double型の配列小数を含む数値
String型の配列文字列
boolean型の配列true または false

たとえば、int型の配列には、80、60、22 のような整数を入れます。

int[] scores = {80, 60, 22, 90, 35};

一方で、名前、年齢、身長、住所のような異なる性質の情報を、自由に混ぜて入れるためのものではありません。

ここは、配列の得意分野とそうでない分野を分ける大切なポイントです。

ドラゴンボール風にたとえると、配列は「同じ種類の修行記録を並べる棚」です。

点数棚なら点数を並べます。
名前棚なら名前を並べます。
戦闘可能かどうかの状態棚なら true / false を並べます。

いろいろな種類の情報をまとめて1人分の記録にしたい場合は、配列よりもクラスの考え方が向いています。

異なる種類の情報をまとめたいときはクラスが向いている

配列は、同じ型の値を複数まとめるのが得意です。

では、1人分の情報として、名前、年齢、身長、住所のような異なる種類の情報をまとめたい場合はどうでしょうか。

この場合は、配列よりもクラスの考え方が向いています。

扱いたいもの向いている仕組み
1つの値変数
同じ種類の値が複数配列
異なる性質の情報を1つにまとめるクラス

ドラゴンボール風にたとえると、次のように整理できます。

扱いたい情報ドラゴンボール風のイメージ向いている仕組み
1人の修行点数1枚の点数カード変数
戦士全員の修行点数点数カードを並べた棚配列
1人の戦士の名前・年齢・戦闘力・所属チーム戦士プロフィール帳クラス

たとえば、1人の戦士を表すなら、将来的には次のようなクラスを考えられます。

class WarriorProfile
{
    String name;
    int age;
    int power;
    String team;
}

この WarriorProfile は、1人の戦士の情報をまとめるための設計図です。

配列が「同じ型の値を横に並べる棚」だとすれば、クラスは「1人分の異なる情報をまとめるプロフィール帳」です。

ただし、ここではクラスを詳しく覚える必要はありません。

まずは、配列は「同じ型の値をまとめるもの」、クラスは「異なる性質の情報を1つにまとめるときに向いているもの」と整理しておくと十分です。

配列はどんな場面で使われるのか

配列は、同じ種類のデータが複数ある場面でよく使われます。

実際のプログラムでも、かなり多くの場所で登場します。

場面配列に入れるもの
テストの点数管理生徒ごとの点数
売上データ月ごとの売上金額
気温の記録日ごとの気温
ゲームプレイヤーごとの得点
アンケート集計回答結果の数値
在庫管理商品ごとの在庫数

ドラゴンボール風にたとえると、配列は次のような場面で使えます。

場面配列で管理するもの
修行場戦士ごとの修行点数
天下一風の大会対戦者ごとの得点
カプセル管理カプセルごとの残数
スカウター記録敵ごとの戦闘力
任務管理任務ごとの達成点

同じ種類の情報がずらっと並ぶ場面では、配列がとても自然に使えます。

変数・配列・クラスの使い分け

ここまでの内容を整理すると、変数、配列、クラスにはそれぞれ向いている場面があります。

仕組み向いている場面
変数1つの値を扱う1人の点数、現在HP、合計点
配列同じ型の値を複数扱う点数一覧、気温記録、売上一覧
クラス異なる性質の情報を1つにまとめる戦士プロフィール、商品情報、ユーザー情報

配列は万能な入れ物ではありません。

配列が得意なのは、同じ種類のデータを並べて扱うことです。

1人の戦士の点数だけなら変数。
戦士全員の点数なら配列。
1人の戦士の名前、年齢、戦闘力、所属チームをまとめるならクラス。

このように使い分けると、Javaのコードが整理しやすくなります。

ドラゴンボール風にたとえると、1つのスカウター表示なら変数です。
戦士全員の戦闘力リストなら配列です。
1人の戦士のプロフィール帳ならクラスです。

図:変数・配列・クラスの使い分け

この図が示していること

この図では、変数、配列、クラスをどのように使い分けるかを示しています。

左の変数は、1つの値を保存する仕組みです。
1人分の点数や、現在のHPのような単独の値に向いています。

中央の配列は、同じ型の値を複数まとめる仕組みです。
点数一覧や気温記録のように、同じ種類のデータが並ぶ場面に向いています。

右のクラスは、異なる性質の情報を1つにまとめる仕組みです。
名前、年齢、戦闘力、所属チームのように、1人分のプロフィールをまとめたい場面に向いています。

ここから分かることは、配列は「複数の値を入れられるから何でもまとめるもの」ではなく、「同じ型のデータを並べて管理するもの」だということです。

配列を学ぶとこの先のJavaが理解しやすくなる

配列は、Javaの基本文法の中でもかなり重要な内容です。

なぜなら、配列を理解すると、たくさんのデータを整理して扱えるようになるからです。

この先につながる内容配列とのつながり
データの集まりの扱い方同じ種類の情報をまとめて管理できる
繰り返し処理の実践順番に処理する流れが見えてくる
集計処理合計や平均を求めやすくなる
探索処理最大値や条件一致を見つけやすくなる
実用的なプログラム多数のデータを整理して扱えるようになる

Javaでは、1つの値だけを扱うよりも、たくさんのデータをまとめて扱う場面がとても多いです。

その土台になるのが配列です。

配列を理解しておくと、今後の学習で出てくる、合計、平均、最大値、最小値、検索、並び替え、2次元配列なども理解しやすくなります。

ドラゴンボール風にたとえると、配列を学ぶことは「戦士たちの修行記録をまとめて管理する力」を身につけることです。

1人ずつ見るだけでなく、全員分を順番に確認し、最高点を探し、平均を出し、条件に合う戦士を見つけられるようになります。

配列の学習で最初に押さえたいポイント

配列の学習を始めるときは、次のポイントを押さえておくと安心です。

ポイント内容
配列は同じ型の値をまとめる異なる型を自由に混ぜない
配列には添字がある位置番号で要素を区別する
添字は0から始まる最初が1ではないので注意する
変数とは役割が違う1つなら変数、複数なら配列
繰り返し処理と相性がよい順番に処理しやすい

この土台ができていると、この先で学ぶ配列の宣言、要素の確保、初期化、添字の使い方、配列の長さといった内容も、ずっと理解しやすくなります。

ドラゴンボール風にたとえると、配列は「同じ種類の修行札を順番に並べて保管する棚」です。

どの棚にどの札があるのかを、添字という番号で見分けます。
そして、その棚を0番から順番に確認していくことで、多くの記録を効率よく扱えるようになります。

配列と変数の違いをしっかり持っておこう

配列と変数の違いを理解するうえで大切なのは、「値の数」と「値の種類」です。

変数は、1つの値を扱うときに使います。
配列は、同じ型の値を複数まとめて扱うときに使います。

判断すること変数が向いている配列が向いている
値の数1つ複数
値の種類単独の情報同じ型の情報の集まり
処理の仕方その値だけを使う添字や繰り返しで順番に扱う

配列を使えるようになると、変数を大量に作らずに済みます。
また、for文などの繰り返し処理と組み合わせることで、たくさんのデータを効率よく扱えます。

ドラゴンボール風にたとえると、変数は「1人の戦士の記録」です。
配列は「戦士たちの記録を番号順に並べた隊列」です。

1つなら変数。
同じ種類のデータが複数あるなら配列。

この感覚を持っておくと、Javaのデータ管理がかなり分かりやすくなります。