【本サイトではGoogleアドセンス、または、アフィリエイト広告を利用しています。】
配列とは?
配列とは、複数の値を順番に保持できるデータ構造のことです。
データ構造という言い回しはわかりにくいので、
複数の値をまとめて代入できる変数のことだと覚えてください。
これまでの説明の中では、変数1つにつき、代入できる値は1つでした。
配列を使えば、1つの変数に複数の関連する値を保持することができます。
もっとイメージがわくように例をあげると、
単独の変数は車、配列の変数は電車をイメージしてください。
車は1台で走行しますが、電車は複数の車両が連なって走ります。
車両1台1台が値を入れる箱だと思ってください。
配列の使い方
配列を変数として定義する方法は以下です。
型[] 変数名; 変数名 = new 型[要素数];
例としてプログラムを書くとこんな感じです。
int[] a;
a = new int[3];
まず、1行目は、配列の変数名を定義しています。
変数を配列として宣言するには、型名の後ろに「[]」(角括弧)をつけます。
次に、2行目で、配列の要素数を定義して配列を初期化しています。
要素数とは、配列の中にある箱の数です。電車で言うと車両の数です。
配列は初期化しないと使うことができません。
また、補足事項として、newは演算子のひとつです。
宣言した変数をオブジェクトとして扱う時に使うのですが、
配列の中に入れる値をパソコンのメモリに保存する為、
その領域を確保する時に必要になります。
と、今は何が何やらさっぱりだと思うので、
配列宣言の時にはnew演算子を使うんだなということで覚えておいてください。
配列のいろいろな宣言方法
先ほどご紹介したのは、配列を宣言する方法の中で、最もスタンダードな方法です。
他にも方法があるので、例とあわせて以下ご紹介します。
「[]」(角括弧)の位置を変えて配列を宣言する方法
宣言方法は以下です。
型 変数名[]; 変数名 = new 型[要素数];
プログラムの例は以下です。
int a[];
a = new int[3];
角括弧の位置を変えたからと言って、特に動きは変わりません。
これは完全に好みの問題になります。
私としては、型名に角括弧がついている方が
変数が配列なのか、単独なのか区別がつきやすいと考えています。
この書き方で書いた人のプログラムを見た時に戸惑わないように、
こういった書き方もあるんだなということで覚えておいてください。
初期化とあわせて配列を宣言する方法
宣言方法は以下です。
型[] 変数名 = new 型[要素数]; または 型 変数名[] = new 型[要素数];
プログラムの例は以下です。
int[] a = new int[3];
int a[] = new int[3];
というように、宣言と初期化を1ステップにまとめて書くことができます。
先ほどお話した通り、初期化しないと配列は使えないので、
特別な事情がなければ、宣言時にあわせて初期化するこの方法をおすすめします。
宣言とあわせて「{}」(中括弧)を使って配列を初期化する方法
以下の形でも配列を初期化することができます。宣言方法は以下です。
型[] 変数名 = {値1, 値2, 値3, …}; または 型 変数名[] = {値1, 値2, 値3, …};
プログラムの例は以下です。
int[] a = {1, 3, 5};
int a[] = {1, 3, 5};
配列に入れる値を「{}」中括弧で囲み、順番にカンマで区切って定義します。
この場合、宣言時に定義した値の個数がそのまま要素数になります。
事前に入れる値が決まっている時は、例のように
一気に書くことでさらにステップ数を減らすことができます。
また、注意点として、配列宣言と同時に書く時のみ、この方法が使えます。
配列のサンプルコード
ここからは配列のサンプルコードをご紹介します。
では、青色の電車と、赤色の電車があるとしてください。
それぞれ5両編成で、各車両には10人の乗客がいます。
これを今までのプログラムで書いてみると、
// 青い電車
int blueTrain1 = 10;
int blueTrain2 = 10;
int blueTrain3 = 10;
int blueTrain4 = 10;
int blueTrain5 = 10;
// 赤い電車
int redTrain1 = 10;
int redTrain2 = 10;
int redTrain3 = 10;
int redTrain4 = 10;
int redTrain5 = 10;
こんな感じになります。
でも、変数10個も宣言して、ちょっと扱いにくいと思いませんか?
これを配列を使ってスッキリしましょう!
これを配列で定義すると以下になります。
// 青い電車
int[] blueTrain;
blueTrain = new int[5];
blueTrain[0] = 10;
blueTrain[1] = 10;
blueTrain[2] = 10;
blueTrain[3] = 10;
blueTrain[4] = 10;
// 赤い電車
int[] redTrain;
redTrain = new int[5];
redTrain[0] = 10;
redTrain[1] = 10;
redTrain[2] = 10;
redTrain[3] = 10;
redTrain[4] = 10;
もう少しスッキリさせましょう。
// 青い電車
int[] blueTrain = new int[5];
blueTrain[0] = 10;
blueTrain[1] = 10;
blueTrain[2] = 10;
blueTrain[3] = 10;
blueTrain[4] = 10;
// 赤い電車
int[] redTrain = new int[5];
redTrain[0] = 10;
redTrain[1] = 10;
redTrain[2] = 10;
redTrain[3] = 10;
redTrain[4] = 10;
さらにスッキリさせると!
// 青い電車
int[] blueTrain = {10, 10, 10, 10, 10};
// 赤い電車
int[] redTrain = {10, 10, 10, 10, 10};
やりました!たったの2ステップに!
というような感じで、プログラムの状況にあわせて
いろいろと宣言を使い分けてください!
配列の要素数の始まりは「0」です
先ほどのサンプルコードを見て気になったことあるでしょうか?
え?青い電車とか言って、車体白いじゃん!
ま、まあ、それはそれとして、
blueTrain[0] = 10;
ここ、何か気になることないでしょうか?
そう、要素数が「0」から始まっています!
配列の要素数は「0」から始まる決まりになっています。
例では、要素数「5」として定義したので、
配列の要素としては、[0]、[1]、[2]、[3]、[4]の5つになります。
例えば、blueTrain[5]へ値を入れると、こんな感じのエラーが出ます。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5 at example.Example.main(Example.java:14)
これは、こういうことを言っています。
「ヘイ!配列の要素数は5つだぜ!要素「5」だと定義した範囲を超えてるぜジョニー!」
ということで、0が開始となることで、要素として指定できる数値の最大値は、
定義した要素数から1を引いた数になるので気をつけましょう!
多次元配列とは?使い方は?
多次元配列とは、複数の値をグループ化して定義できるデータ構造のことです。
配列では、単純に1列に並ぶ値を管理できましたが、
多次元配列では、その列を複数持つことができます。
会社で言うと、1つのチームを管理できるだけでなく、
複数チームが所属する部署、もしくは、会社全体を管理するようなイメージです。
多次元配列の宣言方法は以下です。
型[][]… 変数名 = new 型[要素数1][要素数2]…; または 型… 変数名[][] = new 型[要素数1][要素数2]…;
プログラムを例で書くと以下のような感じです。
int[][] company = new int[2][30];
int company[][] = new int[2][30];
30人の社員が所属する部署を2つ持つ会社をイメージしてください。
2つ目の部署に所属する、社員番号が一番若いAさんの
今期評価を配列に入れてみましょう。
int[][] company = new int[2][30];
// Aさんの評価100点満点
company[1][0] = 100;
2つ目の部署なので、最初に指定する要素は[1]です。
社員番号が一番若いので、次に指定する要素は[0]です。
このように、「グループの要素 > グループ内での順番」
を指定するイメージで多次元配列に値を入れていきます。
まとめ
配列について以下説明しました。
- 配列の宣言
- 配列の初期化
- 配列の宣言方法はいろいろある
- 配列の要素数は「0」から始まる
- 多次元配列の使い方
配列を使うと便利になる場面が多いですが、
1つの変数の中に複数の値が入るので、
今どのような値が入っているのか、頭の中でしっかりと把握しながら
プログラミングをしていきましょう!
次回は、if文の使い方についてお話をします!