配列の概要
複数のデータを扱う際には、「配列」という仕組みを利用するのが便利です。どのプログラム言語でもだいたいこの配列というものが存在します。今回は、配列の概要について説明します。
配列の概要 目次
1.配列とは
配列とは、複数のデータを効率よく扱えるようにしたもので、値を格納する箱(領域)を用意してその箱に対して番号を振ったものになります。例えるならタンスのイメージです。
例えば100人分の社員の名前なんかを扱いたい場合、String型の変数を100個(strSyain1、strSyain2、strSyain3・・・)なんてやってたら大変なので、100個のString変数を格納する箱を用意しておき、1番目の箱、2番目の箱、という風に指定できるようにするのが配列です。
値を格納する一つ一つの箱のことを「要素」と言います。上の図の場合は要素数10の配列ということになります。この10個の各要素に値をセット(代入)しておけば、後は”配列の1番目の要素”と指定すれば、中に格納されている「10」という値を取り出すことができます。
2.配列の型
配列は型を持っており、配列の各要素に代入できる値は、指定した型の値だけです。これまで変数を個別に宣言して利用していましたが、配列とは同じ型の変数を複数個纏めたもの、ということになります。
3.配列を作ってみる
それでは、実際に配列を作ってみましょう。配列をの作り方は色々ありますが、簡単なのは中に格納するデータをすべて指定する方法です。
通常の変数宣言と同じように、まずは型を指定し、そのまま続けて大括弧始まりと終わり「[]」を書きます。この大カッコは変数ですよということを表します。次に変数名を記述しますが、変数名は配列だからと言って特別なことはありません。
そして、変数の宣言と同時に初期化と同じように、「=」を書いたあと、中に格納するデータをカンマ区切りで指定し、それら全てを中カッコ「{}」で囲みます。
// 要素数3のint型の配列を作成
int[] intArray = {3, 2, 8};
package pac01; public class HelloWorld { public static void main(String[] args) { int[] intArray = {3, 2, 8}; } }
4.各要素へのアクセス
配列は、要素数が何個あったとしても、取り扱う際はあくまで全てを纏めた1個の「配列」として扱いますので、int型の変数などと同じように変数としては1個になります。
配列に存在する各要素へアクセスする際には、0から始まる番号(インデックス、添え字などと言います)を指定することで、「配列の3番目の要素」という指定の仕方をします。要素にアクセスする際は、「変数名[インデックス]」という書き方をします。
// 配列intArrayの1番目の要素(インデックスは0)
intArray[0]
インデックスは0から始まることに注意が必要です。1番目の要素はインデックス0、2番目はインデックス1、3番目はインデックス2となります。これは、どのプログラム言語でも同じ考え方です。
package pac01; public class HelloWorld { public static void main(String[] args) { // 要素数3の配列を作成 int[] intArray = {3, 2, 8}; // 添え字0の要素の中身を表示 System.out.println(intArray[0]); } } ------------------------------------------------------------------------ 3
5.配列の型の指定
配列は、個別の変数を纏めたものですので、個別の変数で指定できる型なら同じものを指定することができます。
package pac01; public class HelloWorld { public static void main(String[] args) { // 色々な型の変数を作成 int[] intArray = {3, 2, 8}; double[] dblArray = {1.2, 0.3}; String[] strArray = {"あいうえお", "かきくけこ"}; boolean[] blnArray = {true, true, false}; } }
この場合、各要素の型は、その配列自体の型になります。intArrayの要素はint型ですし、dblArrayの要素はdouble型、strArrayの要素はString型で、blnArrayの要素はboolean型です。
6.配列の要素を全て取得
変数が5個あって、その全ての中身を取得したい場合、取得処理を5個書かなくてはだめでした。配列の場合は、for文などのループ処理を使って、インデックスをループさせれば簡単に全ての要素を取得することができます。
package pac01; public class HelloWorld { public static void main(String[] args) { // 要素数3のint型の配列 int[] intArray = {3, 2, 8}; // for文を使用して繰り返し処理 for(int i=0; i < 3; i++){ // intArrayのインデックスにカウンタ変数iを指定している System.out.println(intArray[i]); } } } ---------------------------------------------------------------------- 3 2 8
今回は、ループ回数を自分で指定しましたが、これを配列の要素の数だけループするように指定することも可能です。通常、こちらの方がオススメです。
配列には、「配列名.length」と書くことで、その配列の長さ(要素数)を表すことができます。
// 配列の要素数を取得
配列名.length
package pac01; public class HelloWorld { public static void main(String[] args) { // 要素数3のint型の配列 int[] intArray = {3, 2, 8}; // intArrayの要素の数だけループを回す(intArray.length は3) for(int i=0; i < intArray.length; i++){ // intArrayのインデックスにカウンタ変数iを指定している System.out.println(intArray[i]); } } } ------------------------------------------------------------------ 3 2 8
要素数が3の配列の場合、インデックスは2までしかないのに、3以上を指定した場合エラーになってしまいますが、このようにintArray.lengthとすることでその心配は無くなりますので基本的にはこの書き方をした方がいいです。
package pac01; public class HelloWorld { public static void main(String[] args) { // 要素数3のint型の配列 int[] intArray = {3, 2, 8}; // 要素数を超えてループしている for(int i=0; i < 4; i++){ // intArrayのインデックスにカウンタ変数iを指定している System.out.println(intArray[i]); } } } ------------------------------------------------------------------ 3 2 8 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 at pac01.HelloWorld.main(HelloWorld.java:13)
最近のコメント