配列


■ 配列とは

配列は、同じデータ型の変数を多数宣言したい場合に利用する方法です。
例えば、あるグループ10人全員の体重を格納できる場所を宣言しようとすると、次のようになります。
     int s1,s2,s3,s4,s5,s6,s7,s8,s9,s10;
ここで、1番目の人の身長の値を変数 s1に入れ、2番目の人の身長の値を変数 s2に入れ、……、と考えます。 この方法で、20人の人の身長の値を入れる場所を宣言しようとすると、次のようになります。
     int s1,s2,s3,s,4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17,s18,s19,s20;
このような方法で、30人、100人のデータを扱おうとすると大変です。嫌になります。しかし、コンピュータでデータを処理する際には、このようなことはしばしばあります。

このような場合に便利な機能が配列という宣言の方法です。

■ 配列の宣言

例えば、上記の例で30人の人の身長の値が格納される場所を宣言するには、次のように書くことができます。
     int ss[];
     ss=new  int[30];
上記は、次のようにひとつに記述することができます。
     int ss[]= new int[30];
この宣言では、次の2つのことをしています。
  1. int型の配列変数を宣言する。
    上記の例では、ss という名前でint型の配列を使えるようにする。
  2. 配列の実体(格納場所)を確保する。
    配列 ss には、int型のデータが30個入る場所を確保する。

■ 配列の参照

宣言した変数をプログラムで利用する場合、その変数名で呼び出します。 配列の場合は、格納する場所は多数ですが、変数名はひとつだけです。
例えば、上記の例では、変数名は ss のみです。 しかし、データを格納する場所は、30個あります。

そこで、配列をプログラムで利用する場合は、次のように前から順に 0,1,2,3,…と番号が付いていると考えて、その番号付で場所を示します。 例えば、「配列 ss の前から3番目の場所に値350を代入する」場合は、 次のように記述します。

     ss[2]=350;
ここで注意する必要があるのは、箱の番号はゼロから始まっているということです。 したがって、前から3番目は、0、1、2となり、上記のように ss に [2] を付ける必要があります。このカッコ付き数値を添字と呼びます。

このように、配列の参照は、変数名に添字を付けて行います。

■ 配列を用いたプログラム

次のプログラムは、int型配列で5つの領域を確保し、その5つに数値を代入します。 次に代入された5つの値の合計を計算し、それを出力しているプログラムです。
public class Hairetu{
    public static void main(String args[]) {
          int suu[]=new int[5];                    //配列suuの宣言
          int sum;

          suu[0]=123;                   //配列suuの1番目の領域に123を代入 
          suu[1]=234;                   // 以下同様
          suu[2]=345; 
          suu[3]=456; 
          suu[4]=567;
  
          sum=suu[0]+suu[1]+suu[2]+suu[3]+suu[4];     // 配列の値の合計を計算する。
          System.out.println("配列の合計は,"+sum+"です。");  //合計を出力する。
    }
}
上記のプログラムを実行すると、次のように結果が出力されます。
[egi@taro]$ java Hairetu
配列の合計は,1725です。
[egi@taro]$ 
■ 配列の初期化

Java言語では、他の変数と異なって、配列は次のように初期化されます。

データ型初期値
int型0
float型0.0
char型\u0000
boolean型false

利用によっては上記以外の値を初期化したい場合があります。 そのような場合、次の2通りがあります。

  1. 上記のプログラム例のように、代入命令を記述する方法。
  2. 下記のように配列の宣言で初期化しておく方法。
    public class Hairetu1{
        public static void main(String args[]) {
              int suu[]= {123,234,345,456,567};
              int sum;
    
              sum=suu[0]+suu[1]+suu[2]+suu[3]+suu[4];
              System.out.println("配列の合計は,"+sum+"です。");
        }
    }
    
    
    上記プログラムを実行しても、以下のように同じ結果が出力されます。
    [egi@taro]$ java Hairetu1
    配列の合計は,1725です。
    [egi@taro]$ 
    
■ 配列に関するその他のこと

  1. 配列の添字を間違うと。。。
    配列の添字の数が、宣言した数以外の数が使われると、プログラム実行時にエラーが表示されます。決して翻訳時(javac)ではエラーになりません。
    次のプログラムでは、配列では5個しか領域を確保していないのに、6番目を指定しています。
    public class Hairetu1{
        public static void main(String args[]) {
              int suu[]= {123,234,345,456,567};
              int sum;
    
              sum=suu[0]+suu[1]+suu[2]+suu[3]+suu[5];    // suu[5]は誤り
              System.out.println("配列の合計は,"+sum+"です。");
        }
    }
    
    このプログラムを翻訳しても、誤りは出力されません。 しかし、実行しようとすると、以下のようにエラー表示され実行ができないことになります。
    [egi@taro]$ javac Hairetu1.java           <ーーー翻訳、但しエラー無し
    [egi@taro]$ java Hairetu1                    <ーーー実行、6行目にエラーがあると表示
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
            at Hairetu1.main(Hairetu1.java:6)
    [egi@taro]$ 
    
    配列を使用する場合は、宣言した配列の個数をしっかり守って使う必要あります。

  2. 配列の長さを知る方法
    宣言した配列の個数を守らないとエラーが出て、プログラムが途中で停止することになります。したがって、その個数を間違えないようにプログラムの中で個数を知る方法があります。
    以下では、配列suuの個数をsuu.lengthで調べ、得られた数(30が得られる)をnnに代入しています。その後、このnnを使って、最後から2番目
         int  nn, suu[]=new int[30];          //配列suuで要素30個を宣言
         nn=suu.length;                           //配列suuの個数を調べ、その数をnnに代入する
         suu[nn-2]=1234;                         // 配列suuの最後から2番目の要素に1234を代入する
    
    このようにlengthを用いて、配列の個数を獲得して、それをプログラムに使用すると間違いが少なくなります。
■ 多次元配列

配列は、「横に5個で縦に7個、併せて35個の場所を確保する」こともできます。 このような配列のことを、多次元配列と呼びます。 多次元配列は、以下のように宣言します。

       int aa[][] = new int[3][4];        //2次元配列
       int bb[][][] = new int[3][4][5];   //3次元配列
上記の配列aaは、横3個、縦4個、合わせて12個の領域が確保されます。 次の配列bbは、横3個、縦4個、高さ5個の合わせて60個の領域が確保されます。 このように配列を、立体的に考えて確保することもできます。

このような多次元配列を参照する場合は、添字も複数使います。 上記aaの配列で横2番目、縦1番目の領域に値540を代入するには、次のようにします。

     ss[1][0]=540;

プログラミング / 江木