学生の学籍番号、テストの成績、身体計測の結果など、同じ種類のデータが集まっているときは、それらの1つ1つを名前で呼ぶよりも、番号で呼ぶほうがわかりやすく便利なことがあります。
同じ型のデータが複数あり、一定の規則で並んでいるデータの集合を「配列」といいます。
配列とは複数のデータのすべての型が同じで、1つの名前によってアクセスできる変数の並びのことです。
配列中のそれぞれの変数は、「配列の要素」もしくは単に「要素」と呼びます。
配列は密接に関連するデータのグループを操作するのに便利です。
配列の個々の要素を指定する際は「インデックス番号」と呼ばれる整数を使って指定します。
今回は配列の作成、利用について解説します。
配列の宣言と作成
配列は基本的に、次の2つの方法で利用可能となります。
- 配列を宣言した上で作成
- 宣言と同時に初期化した上で作成
配列の宣言
配列の宣言の書式は以下の通りです。
データ型[ ] 配列名; データ型 配列名[ ];
例文
int[ ] i; float f[ ];
「データ型」と書いている部分は例えば、int 型などの変数の型が入ります。
配列の宣言方法は上に示すようにデータ型の後に「[ ]」が来るものと変数名の後に「[ ]」が来るものと2種類あります。
どちらを使っても同じ意味です。
しかし前者の方が「データ型の配列」と素直に読め、理解も容易であると言われています。
配列の作成
配列の作成は「new演算子」を用いて行います。
配列名 = new 型[要素数];
例文
int[ ] array; array = new int[10];
要素数には配列で必要とする変数の個数を指定します。
この場合、new演算子を用いただけの場合、個々の要素の値は、その型のデフォルト値が入ります。
配列の初期化
配列のメモリの確保と個別の要素の指定を以下のように同時に行う方法もあります。
データ型 配列名[ ] = {値1, 値2, 値3,・・・}; データ型[ ] 配列名 = {値1, 値2, 値3,・・・};
この方法は、「配列の初期化」と呼ばれます。
次の記述は、int型の5個の要素を持つ配列を宣言し、配列のためのメモリを確保し、各要素に順番に1から5までの値を設定しています。
int[ ] array = {1, 2, 3, 4, 5};
これはarrayという名前のint型の配列を作成し、要素数は5とします。
またそれぞれの要素の値としてインデックスの番号順に1、2、3、4、5と設定します。
ポイント! new演算子
基本データ型の変数の場合、変数の宣言のみでした。
ここで、配列は宣言と作成に分けているのは、別で解説しているオブジェクト指向の考え方を配列の作成の部分にも取り入れているためです。ここでは、「配列は宣言して、且つ作成する必要があるものだ」としてみておいてください。
さらに配列の宣言と作成を分けることで「配列の大きさをプログラムの実行中に決める事が出来る」というメリットもあります。
new演算子は「メモリを確保する」という意味があります。配列はこれまでの基本データ型の変数と異なり、変数を宣言しただけでは利用することができません。
必ず配列のためにメモリを確保しなくてはいけません。
配列と同じようにnew演算子で作業用のメモリを確保しなくては使えない変数を参照型の変数と呼びます。
配列の要素へのアクセス
配列の要素の値にアクセスするには、配列に自動で割り当てられている「インデックス番号」を利用します。
(インデックス番号の部分に指定される数値のことを「添え字」と呼ぶことがあります)
配列名[インデックス番号]
例文
int[ ] array; array = new int[3]; array[0] = 1; array[1] = 10; array[2] = 100;
Java言語の配列のインデックス番号は、0から始まります。
つまり、配列の1番目の要素にアクセスするには、添え字として1ではなく0を指定します。
配列の添え字を指定するには、指定したい要素のインデックス番号を”[ ]”の間に記述します。
numberの2番目の要素にアクセスするにはnumber[1]とします。
ポイント!
[ ] の形の括弧を”ブラケット”と呼びます。
【配列】
public class Array{ public static void main(String[ ] args){ int[ ] num; // 配列の変数の宣言 num = new int[3]; // 配列の作成(メモリの確保) num[0] = 66; // 配列の個々の値を設定 num[1] = 55; num[2] = 90; System.out.println("国語:" + num[0] + "点"); System.out.println("数学:" + num[1] + "点"); System.out.println("英語:" + num[2] + "点"); } }
実行結果
国語:66点 数学:55点 英語:90点
[動画解説]
vimeo.com
配列と繰り返し制御構造
次のように配列の添え字に変数を使うこともできます。
変数を使うことで、for文などのカウンタを添え字として利用する事もできます。
配列の各要素に対して順番に値を入れたり、値を取得したりするときにはfor文などを利用すると便利です。
int[ ] num; num = new int[10]; for(int i = 0; i < 10; i++){ num[i] = i * 10; //for文を利用し、配列に値を代入 }
【配列と繰り返し】
public class Array2{ public static void main(String[ ] args){ int[ ] num; num = new int[10]; for(int i = 0; i < 10; i++){ num[i] = i * 10; //for文を利用し、配列に値を代入 } for(int i = 0; i < 10; i++){ System.out.println("num[" + i + "] = " + num[i]); //配列の値を出力 } } }
実行結果
num[0] = 0 num[1] = 10 num[2] = 20 num[3] = 30 num[4] = 40 num[5] = 50 num[6] = 60 num[7] = 70 num[8] = 80 num[9] = 90
[動画解説]
vimeo.com
【いろいろな初期化の方法】
public class MyArray{ public static void main(String[ ] args){ int i[ ] = new int[3]; char[ ] c; String str[ ] = {"Welcome", "to", "Java"}; c = new char[3]; i[0] = 0; i[1] = 1; i[2] = 2; c[0] = 'A'; c[1] = 'B'; c[2] = 'C'; for(int n = 0; n < 3; n++){ System.out.println(i[n]); System.out.println(c[n]); System.out.println(str[n]); System.out.println( ); //空白行を生成 } } }
実行結果
0 A Welcome 1 B to 2 C Java
[動画解説]
vimeo.com
多重配列
変数を配列のようにまとめることができるように、配列を配列でまとめることも可能です。
このように、配列を要素として持つ配列を、「多重配列」または「多次元配列」と呼びます。
例えば次のような、3×3の表を作成して、各々を配列の要素としてアクセスしたいと考えます。
書式は以下の通りです。
データ型[ ][ ] 配列名 = new データ型[ 要素数 ][ 要素数 ];
例文 : int型の3 × 3 の多重配列を作成する
int[ ][ ] array = new int[3][3];
このような多重配列は要素を指定するのに2つのインデックス番号が必要です。
このように2つのインデックス番号で要素が指定できる場合は「二次元(二重)配列」と呼びます。
また、ブラケット([ ])を更に増やすことで三次元配列、四次元配列も同じように作ることができます。
【二次元配列】
public class DoubleArray{ public static void main(String[ ] args){ String[ ][ ] strArray = new String[2][3]; strArray[0][0] = "おはようございます"; strArray[0][1] = "こんにちは"; strArray[0][2] = "こんばんは"; strArray[1][0] = "Good Morning"; strArray[1][1] = "Hello"; strArray[1][2] = "Good Night"; System.out.println("日本語の挨拶"); for( int i = 0 ; i < 3 ; i++){ System.out.println(strArray[0][i]); } System.out.println("英語の挨拶"); for( int j = 0 ; j < 3 ; j++ ){ System.out.println(strArray[1][j]); } } }
実行結果
日本語の挨拶 おはようございます こんにちは こんばんは 英語の挨拶 Good Morning Hello Good Night
[動画解説]
vimeo.com
配列の要素数の取得
配列の要素数(配列の長さ)を確認したいときは、「lengthプロパティ」で配列の要素数を確認できます。
配列は自分の要素の長さを情報として持っています。
その情報を表すのがlengthプロパティです。
書式は以下の通りです。
配列名.length;
ポイント!
プロパティとは、コンピュータ用語では「属性」という意味で用いられています。
属性とは情報と読み替えるのがわかりやすいでしょう。
lengthプロパティは配列の長さ情報を得ているという意味になります。
【lengthプロパティ】
public class Array3{ public static void main(String[ ] args){ int[ ] num; num = new int[10]; System.out.println("配列の要素数は:" + num.length); for(int i = 0; i < num.length; i++){ num[i] = (i + 1) * 10; } for(int i = 0; i < num.length; i++){ System.out.println("num[" + i + "] =" + num[i]); } //多重配列の各配列に対してもlengthプロパティを使用できる int[ ][ ] array = new int[12][31]; System.out.println("1次元の要素数は:" + array.length); System.out.println("1次元のIndex番号0の中に格納されている2次元目の配列の要素数は:" + array[0].length); } }
実行結果
配列の要素数は:10 num[0] = 10 num[1] = 20 num[2] = 30 num[3] = 40 num[4] = 50 num[5] = 60 num[6] = 70 num[7] = 80 num[8] = 90 num[9] = 100 1次元の要素数は:12 1次元のIndex番号0の中に格納されている2次元目の配列の要素数は:31
[動画解説]
vimeo.com
拡張for文
JDK5.0から導入された拡張for文を利用すると、配列やコレクションの全要素を順番に取り出して処理することができます。
通常のfor文では、配列の要素にアクセスする場合、for文の条件式の部分でlengthプロパティを使って、配列の要素の数だけループさせて配列の要素にアクセスをしますが、拡張for文を使うと要素の数分だけ自動的にループが行われるので、lengthプロパティを使用せず、記述がシンプルになります。
拡張for文の書式は下記の通りです。
for文の()の中に、データ型と変数名を指定し、コロンで区切って取り出したい配列やコレクションを指定します。
これにより配列やコレクションの要素が1つずつ、変数に代入され、for文の処理が、配列やコレクションの数分だけ、順番に処理されます。
要素を代入する変数のデータ型は、配列やコレクションの各要素のデータ型に合わせる必要があります。
for(データ型 変数名 : 配列またはコレクション){ //繰り返される処理 }
【拡張for文】
public class Array4{ public static void main(String[ ] args){ String [] array = {"Apple", "Orange", "Banana"}; for(String s : array){ System.out.println(s); } } }
実行結果
Apple Orange Banana
[動画解説]
vimeo.com
まとめ
- 配列の宣言と作成
配列を利用するには宣言だけでなく、new演算子による作成が必要です。
- 配列の要素へのアクセス
配列の各要素へのアクセスはインデックスを利用して行います。
- 配列と繰り返し制御構造
配列の要素にアクセスする際は、for文やwhile文などと組み合わせて利用されることが多いです。
- 多重配列
配列を配列でまとめたものを重配列、多次元配列と呼びます。
- 配列の要素数の取得
lengthプロパティを使うことで配列の要素数を実行時に知ることができます。
- 拡張for文
配列やコレクションの要素を1つずつ順番に、変数に代入しながら取り出します。
独学で挫折しそうになったら、オンラインプログラミングスクール