Java超|配列の宣言・確保・代入

配列は、名前を決めて、箱を作って、番号を指定して値を入れる。
宣言・確保・代入の流れをつかめば、Javaの配列は「戦士たちの修行記録パネル」のように整理して扱える。

配列は、同じ型の値をまとめて扱うための便利な仕組みです。

たとえば、戦士たちの修行点数を管理したいとします。
1人分だけなら、普通の変数で十分です。

int score;

しかし、5人分、10人分、30人分の点数を扱いたい場合、1つずつ別々の変数を用意すると大変です。

そこで使うのが配列です。

配列を使うと、同じ型の値を1つのまとまりとして管理できます。
ただし、Javaでは配列をいきなり使い始めることはできません。

配列を使うには、次の3つの流れを意識します。

手順内容イメージ
1配列変数を宣言する配列を扱う名前を用意する
2要素を確保する値を入れる箱を作る
3添字を指定して値を代入するどの箱に値を入れるか決める

ドラゴンボール風にたとえると、配列の準備は「戦士たちの修行点数を記録する訓練パネルを作る流れ」です。

まず、訓練記録パネルに test という名前札を付けます。
次に、点数を入れる枠を5個作ります。
そして、0番の枠に80、1番の枠に60、2番の枠に22のように、添字を指定して値を入れていきます。

名前札だけでは、点数は入れられません。
点数を入れる枠を作って、はじめて配列として値を保存できるようになります。

この「宣言」「確保」「代入」の流れを押さえることが、配列を理解するための大切な第一歩です。

配列を使う前に必要な2つの準備

Javaで配列を使うときは、最初に2つの準備が必要です。

準備内容ドラゴンボール風のイメージ
配列の宣言配列を扱うための変数を用意する訓練記録パネルに名前札を付ける
要素の確保値を入れる箱を必要な数だけ作る点数を入れる枠を並べる

この2つは、似ているようで役割が違います。

配列の宣言は、「この名前で配列を扱います」と決める作業です。
しかし、宣言しただけでは、まだ値を入れる箱はありません。

要素の確保は、実際に値を入れる場所を作る作業です。
この段階になって、はじめて数値や点数を入れられるようになります。

ドラゴンボール風にたとえると、test という名前札を作っただけでは、まだ訓練記録パネルの枠は存在しません。

名前札だけでは、戦士たちの修行点数は保存できません。
そのあとで、5個の記録枠を作ることで、ようやく5人分の点数を入れられる状態になります。

配列の宣言とは何か

配列の宣言とは、配列を扱うための変数を用意することです。

整数を1つだけ扱う場合は、普通の int 型の変数を使います。

int score;

一方、整数を複数まとめて扱いたい場合は、int[] のように、型のあとに [] を付けます。

int[] test;

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

書き方意味
int score整数を1つ扱う変数
int[] test整数を複数まとめた配列を扱う変数

ここで大切なのは、int と int[] は別の意味を持つという点です。

int は、整数を1つ扱う型です。
int[] は、整数の配列を扱う型です。

つまり、int[] test と宣言すると、test は「整数を複数まとめた配列を扱うための変数」になります。

ドラゴンボール風にたとえると、int score は「1人の戦士の修行点数カード」です。
int[] test は「複数の戦士の修行点数をまとめて管理する訓練記録パネルの名前札」です。

1人分だけなら score で十分です。
複数人分をまとめて扱うなら、test のような配列変数を使います。

宣言しただけではまだ配列は使えない

配列でつまずきやすいのが、「宣言しただけで値を入れられる」と思ってしまうことです。

int[] test;

この文で、test という配列変数は用意されます。

しかし、この時点では、まだ値を入れる箱はありません。
つまり、配列を扱う名前だけがある状態です。

状態できること
配列変数だけを宣言した状態配列を扱う名前だけがある
要素を確保した状態実際に値を入れる箱がある
値を代入した状態各箱に値が入っている

ドラゴンボール風にたとえると、test という名前札だけがある状態です。

名前札はあります。
でも、その先に点数を入れる枠はまだありません。

そのため、名前札だけを見ても、戦士たちの修行点数は記録できません。
配列を使うには、宣言したあとに、実際の要素を確保する必要があります。

この「宣言だけではまだ箱がない」という感覚は、とても大切です。

要素の確保とは何か

要素の確保とは、配列の中に値を入れる箱を必要な数だけ用意することです。

たとえば、整数を5個入れたいなら、5個分の要素を確保します。

test = new int[5];

この文では、整数を5個入れられる配列を新しく作り、それを test で扱えるようにしています。

部分意味
new新しく配列を作る
int整数を入れる配列であることを表す
[5]要素を5個用意する
test =作った配列を test に結びつける

new int[5] は、「整数を入れる箱を5個持つ配列を新しく作る」という意味です。

ドラゴンボール風にたとえると、new は「新しい訓練記録パネルを作る合図」です。
int[5] は「整数の修行点数を入れる枠を5個作る」という意味です。

これで、test という名前札の先に、5個の点数枠が並びます。

宣言と確保を分けて考える

配列では、宣言と確保を分けて考えることがとても大切です。

int[] test;
test = new int[5];

1行目では、配列変数 test を宣言しています。
2行目では、5個分の要素を確保しています。

作業コード役割
宣言int[] test;配列を扱う変数を用意する
確保test = new int[5];値を入れる箱を5個作る

この2つがそろうことで、配列を使う準備が整います。

状態ドラゴンボール風のイメージ
宣言だけtest という名前札だけがある
確保まで完了名前札の先に5個の記録枠が並んでいる
代入まで完了各記録枠に修行点数が入っている

配列は、名前だけでは使えません。
名前の先に、実際の箱が必要です。

ドラゴンボール風に言えば、訓練記録パネルの名前札を作り、そのあとで点数を入れる枠を作る。
この2段階を分けて見ると、配列の仕組みがぐっと理解しやすくなります。

図:配列の宣言と要素の確保

この図が示していること

この図では、配列を使う前に必要な「宣言」と「確保」の違いを示しています。

最初に int[] test; と書くことで、配列を扱うための変数 test を用意します。
ただし、この時点では、まだ値を入れる箱はありません。

次に test = new int[5]; と書くことで、整数を入れる箱を5個作ります。

そして、test という名前から、その5個の箱を扱えるようになります。

ここから分かることは、配列では「名前を用意すること」と「実際の箱を用意すること」が別の作業だということです。

宣言と確保を1行で書くこともできる

配列の宣言と確保は、1行でまとめて書くこともできます。

int[] test = new int[5];

これは、次の2つをまとめた形です。

作業内容
int[] test配列変数 test を宣言する
new int[5]整数を入れる箱を5個作る

つまり、int[] test = new int[5]; は、「整数の配列を扱う test という変数を用意し、同時に5個分の要素を作る」という意味です。

学習の最初は、宣言と確保を分けて考えると理解しやすいです。
慣れてきたら、1行でまとめて書く形も自然に読めるようになります。

ドラゴンボール風にたとえると、分けて書く形は「名前札を作ってから、訓練記録パネルを作る」流れです。
1行で書く形は「名前札付きの訓練記録パネルを一気に作る」流れです。

どちらも結果としては、test から5個の要素を扱えるようになります。

配列の要素とは何か

配列の中にある1つ1つの箱を要素といいます。

たとえば、new int[5] で作った配列には、5個の要素があります。

要素の順番添字
1個目0
2個目1
3個目2
4個目3
5個目4

ここで大切なのは、Javaの配列では、最初の添字が0から始まることです。

5個の要素を確保した場合、使える添字は次の5つです。

0, 1, 2, 3, 4

5個あるからといって、最後の添字が5になるわけではありません。

要素数使える添字最後の添字
50から44
100から99
300から2929

最後の添字は、要素数より1小さい値になります。

ドラゴンボール風にたとえると、5個の記録枠がある訓練パネルでは、番号札は0番から4番までです。

5番の記録枠はありません。

このルールを忘れて5番を指定すると、存在しない枠を使おうとしている状態になります。

添字は0から始まる

配列の添字が0から始まることは、最初は少し不思議に感じるかもしれません。

日常では、1個目、2個目、3個目と数えることが多いです。
しかし、Javaの配列では、1個目は0番です。

日常の数え方Javaの添字
1個目0
2個目1
3個目2
4個目3
5個目4

たとえば、5個の要素を持つ配列で使える場所は、次の通りです。

test[0]
test[1]
test[2]
test[3]
test[4]

test[5] は使えません。

ドラゴンボール風にたとえると、0番から4番までしかない訓練記録パネルで、5番の枠を開こうとしている状態です。

そこには枠がないため、配列の範囲外にアクセスすることになります。

配列では、「要素数が5なら最後は4」と覚えておくと安心です。

配列に値を代入する方法

配列の要素を確保したら、各要素に値を入れられるようになります。

配列に値を入れるときは、配列名と添字を組み合わせて、どの場所に入れるのかを指定します。

基本の形は次の通りです。

配列変数名[添字] = 値;

たとえば、test の0番に80を入れるなら、次のように書きます。

test[0] = 80;

1番に60を入れるなら、次のように書きます。

test[1] = 60;

5個の要素に値を入れるなら、次のようなイメージになります。

添字代入される値
080
160
222
350
475

ドラゴンボール風にたとえると、0番の記録枠に80点の修行札を入れ、1番の記録枠に60点の修行札を入れ、2番の記録枠に22点の修行札を入れていくイメージです。

配列では、配列全体に一気に何かを入れるというより、1つ1つの要素を指定して値を入れていくと考えると分かりやすいです。

配列要素への代入は普通の変数に似ている

配列の要素への代入は、普通の変数への代入と似ています。

普通の変数なら、変数名を指定して値を入れます。

score = 80;

配列の要素なら、配列名と添字を指定して値を入れます。

test[0] = 80;
種類指定の仕方
普通の変数変数名で指定するscore = 80;
配列の要素配列変数名[添字] で指定するtest[0] = 80;

普通の変数では、変数名そのものが1つの値を表します。

しかし、配列では test だけでは個々の値を表せません。
test[0]、test[1]、test[2] のように、添字を付けてはじめて特定の要素を指定できます。

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

点数を入れるには、パネル全体ではなく、どの枠に入れるのかを指定する必要があります。

図:配列の各要素に値を代入する

この図が示していること

この図では、配列の各要素に値を1つずつ代入している様子を示しています。

test[0] には80が入っています。
test[1] には60が入っています。
test[2] には22が入っています。
test[3] には50が入っています。
test[4] には75が入っています。

ここから分かることは、配列では「どの箱に値を入れるのか」を添字で明確に指定する必要があるということです。

配列名だけでは、個別の要素を指定できません。
test[0] や test[1] のように、配列名と添字を組み合わせて、はじめて特定の要素を扱えます。

配列変数は何を表しているのか

配列変数は、配列全体を扱うための目印だと考えると分かりやすいです。

int[] test = new int[5];

この場合、test は配列全体を扱うための名前です。

ただし、実際の値は test そのものに1つだけ直接入っているわけではありません。
値は、test[0]、test[1]、test[2] のような各要素に入ります。

用語イメージ
配列変数配列全体を扱うための目印
配列要素実際に値が入る1つ1つの箱
添字どの箱かを示す番号

ドラゴンボール風にたとえると、test は訓練記録パネルに向かう案内札です。

実際の点数は、test[0]、test[1]、test[2] のような各記録枠に入っています。

この感覚を持っておくと、この先で配列を別の変数に代入したり、メソッドに渡したりする内容を学ぶときにも理解しやすくなります。

配列の準備の流れを整理する

配列を使う流れは、次の3段階で考えると整理しやすいです。

順番作業内容
1宣言配列を扱う変数を用意する
2確保値を入れる要素を必要な数だけ作る
3代入添字を指定して値を入れる

ドラゴンボール風にたとえると、次の流れです。

Javaの流れドラゴンボール風のイメージ
配列変数を宣言する訓練記録パネルに test という名前札を付ける
要素を確保する点数を入れる枠を5個並べる
値を代入する各枠に修行点数を入れる

この流れを押さえておくと、配列の準備で迷いにくくなります。

配列は、宣言だけでは不完全です。
宣言して、要素を確保して、添字を指定して代入する。

この3つがつながって、はじめて「配列を使う準備が整った」と考えられます。

具体的な流れを文章で追ってみる

ここでは、具体的なサンプルプログラムではなく、配列の準備の流れを文章で追ってみます。

まず、Javaに「整数の配列を扱う名前 test を用意する」と伝えます。
これが宣言です。

次に、「test から扱える整数の箱を5個作る」と伝えます。
これが確保です。

そのあと、「0番の箱に80を入れる」「1番の箱に60を入れる」「2番の箱に22を入れる」というように、添字を指定して値を入れていきます。
これが代入です。

段階頭の中のイメージ
宣言test という名前を用意する
確保test の先に5個の箱を作る
代入test[0]、test[1] のように場所を指定して値を入れる

このように、配列の準備は一気に覚えようとするより、段階ごとに分けて見ると理解しやすくなります。

ドラゴンボール風に言えば、いきなり修行点数を記録するのではありません。

まず、訓練記録パネルに名前を付ける。
次に、点数を入れる枠を作る。
最後に、番号を指定して点数札を入れる。

この順番が大切です。

配列を使うときに起きやすい勘違い

配列の宣言・確保・代入では、次のような勘違いが起きやすいです。

勘違い正しい考え方
int[] test; だけで値を入れられる宣言だけでは箱がないので、newで確保が必要
new int[5] なら添字5まで使える使える添字は0から4
test に直接80を入れる値は test[0] のように要素へ入れる
配列名だけで1つの値を表す配列名は配列全体を扱う目印
添字は1から始まるJavaの配列は0から始まる

特に大切なのは、new int[5] の意味です。

これは「5番まで使える」という意味ではありません。
「箱を5個作る」という意味です。

5個の箱の番号は、0、1、2、3、4です。

要素数最後の添字
54
109
3029

最後の添字は、要素数 - 1 です。

ドラゴンボール風にたとえると、5個の記録枠があるからといって、5番の枠があるわけではありません。
番号札は0番から始まるため、最後は4番です。

図:宣言・確保・代入の全体像

この図が示していること

この図では、配列を使う準備を「宣言」「確保」「代入」の3段階で示しています。

まず、int[] test; で配列を扱う名前を用意します。
次に、test = new int[5]; で値を入れる箱を5個作ります。

そのあと、test[0] = 80 のように、添字を指定して値を入れます。

ここから分かることは、配列は「名前を用意しただけ」では使えないということです。

名前を用意し、箱を作り、添字を指定して値を入れる。
この流れが、配列の基本になります。

配列の準備はこの先の学習につながる

配列の宣言、要素の確保、値の代入は、配列学習の土台です。

ここを理解しておくと、この先の内容がかなり分かりやすくなります。

この先の学習今回の内容とのつながり
配列の初期化宣言・確保・代入をまとめて行う考え方につながる
配列から値を取り出す添字で要素を指定する考え方が必要
配列の長さ要素数と添字の関係が必要
for文との組み合わせ添字を順番に変えながら要素を処理する
合計や平均の計算各要素の値を順に扱う
最大値や最小値の探索要素を1つずつ比較する

ドラゴンボール風にたとえると、今回の内容は「訓練記録パネルを作り、枠を並べ、点数札を入れる準備」です。

このパネルがあるからこそ、あとで全員分の点数を順番に見たり、合計したり、最高点を探したりできます。

配列の準備があいまいだと、この先で for文 と組み合わせるときや、配列の長さを扱うときに混乱しやすくなります。

だからこそ、最初に「宣言」「確保」「代入」の流れをしっかり押さえておくことが大切です。

まず覚えたい大切なポイント

配列の宣言・確保・代入では、次のポイントを押さえておきましょう。

ポイント内容
配列を使うには準備が必要宣言と要素の確保が必要
宣言だけでは値を入れられない箱がまだ用意されていない
newで要素を確保する必要な数だけ値を入れる場所を作る
添字で場所を指定するどの要素を使うか番号で選ぶ
添字は0から始まる最初の要素は0番
最後の添字は要素数 - 15個なら最後は4番
代入は要素ごとに行う配列名[添字] で場所を指定する

特に大切なのは、宣言だけではまだ配列の中身を使えないという点です。

配列変数を用意するだけではなく、newで要素を確保します。
そして、確保した各要素に、添字を指定して値を入れていきます。

この3段階をつなげて理解すると、配列の基本がかなり見えやすくなります。

配列の基本は宣言・確保・代入の流れで考える

配列を使うときは、まず次の順番を思い出しましょう。

流れ意味
配列変数を用意する配列を扱う名前を作る
要素を確保する値を入れる箱を作る
添字を指定して代入するどの箱に値を入れるか決める

配列は、同じ型の値をまとめて扱うための便利な仕組みです。

ただし、使う前には準備が必要です。

宣言だけで終わらず、要素を確保する。
要素を確保したら、添字を使って値を入れる。
そして、添字は0から始まる。

この流れが頭の中でつながると、配列の扱いはぐっと分かりやすくなります。

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

まず、パネルに名前を付けます。
次に、点数を入れる枠を作ります。
そして、0番、1番、2番のように場所を指定して、修行点数を入れます。

この準備ができれば、たくさんのデータをJavaで整理して扱えるようになります。