3章 配列
1.配列とは
 例えば100個のデータが合った場合、これを変数a1,a1,a3・・・a100と設定したのでは大変だから、メモリー上に100個の連続した領域を確保し、何件ものデータを総括的に扱うことのできる方法を配列という。
 配列の添え字は、0からはじまるプログラム言語と、1から始まるプログラムがある。Javaは0からはじまる。COBOLは1。Javaは、配列を入れるための変数を宣言し配列の領域を確保し、確保した領域を宣言した変数に入れるという操作をしなければならない。領域を確保する際はどのくらいの大きさの配列かを指定しなければならないが、配列を入れるための変数を宣言する際にはどのくらいの大きさかは宣言しなくても構わない。
 
2.配列の宣言と初期化
Javaでは、配列を使用する場合に配列の最後を越えてアクセスしていないかどうかをチェックしています。つまり10個の要素しかない配列の11番目にアクセスすることはできない。(例外をスローする)
import  java.io.*;

class Test{
    public static void main(String args[ ]){
        
int a[ ] ;
         a =
new int [10];

         // 要素数が10の配列の11番目にアクセスしようとした 
    // 添え字が0から始まるので、11番目は10になる
    System.out.println(a[10]);
     }
}

C:\java>javac Test.java                                       ← コンパイルは正常 

C:\java>java Test
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException at Test.main(Test.java:9)
                                                                       ↑ 実行時にエラーが出る
C:\java>

配列の領域を確保するのと同時に、初期化を行うこともできる。
  int raikyaku[ ] = { 1,2,3,4,5 } ;

この場合、配列の大きさは、初期化の際の要素数になる。つまり、上記の例では要素数が5つの配列になる。

実際の配列領域を入れるための変数があるという事は、配列領域を別の変数に代入することもできる。
import java.io.*; 

class Test{
    
public static void main (String args[ ]){
         
int a[ ] = {  1,2,3,4,5 } ;
          int b[ ] ;

          b = a ;

          System.out.println(b[3]);

          a[3] = 100;

          System.out.println(b[3]);
    }
}

C:\java>javac Test.java

C:\java>java Test
4
100

C:\java>

Javaでは変数を用いて配列の領域確保を行うことができる。すなわち、動的に配列のサイズを変化させることができる。
import java.io.*;

class Test{
    public static void main(String args[ ]) {
         int i = 200;
         int a[ ] = new int [i];
    }
}

 
3.配列の使用法 
 配列は添え字を用いることで、その要素の読み書きをする。添え字は変数であっても構わない。
 「int型」の要素数10個の配列を作り、これに1から10の数字を代入する例
// 添え字に変数を使わない例
import  java.io.*;

class Test{
      public static void main (String args[ ]) {
           int a[ ] = new int [10];

           a[0] = 1;
           a[0] = 2;
           a[0] = 3;
           a[0] = 4;
           a[0] = 5;
           a[0] = 6;
           a[0] = 7;
           a[0] = 8;
           a[0] = 9;
           a[0] = 10;
     }
}

// 添え字に変数を使った例
import  java.io.*; 
 
class Test{ 
    public static void main(String args[ ]){
        int a[ ] = new int [10];
       int i;         // 添え字
 
   for( i = 0 ; i < 10 ; i++ )
           a[i] = i+1;
  }
}

  
[配列の変数.length]とすることで、配列の大きさを取得できる。
import  java.io.*; 
 
class Test{ 
    public static void main(String args[ ]) {
        int a[ ] = new int [10];
       int i;         // 添え字
 
   for( i = 0 ; i < a.length ; i++ )
           a[i] = i+1;
  }
}

  
配列のコピー
import  java.io.*; 
 
class Test{ 
    public static void main(String args[ ]){
        int a[ ] = { 5,4,3,2,1 };
        int b[ ] = { 1,2,3,4,5 };

         // 配列の表示
    showArray(a);
    showArray(b);

         // 配列のコピー
         // 配列aの10番目からa.length個(すべて)を配列bの0番目へとコピーする
    System.arraycopy(a, 0, b, 0, a.length); 
 
         // 配列の表示 
    showArray(a);
    showArray(b);
   }
 
   // 配列を表示するメソッド 
    public static void showArray(  int a[ ] ){
    for( int i = 0 ; i < a.length ; i++ ) 
        System.out.print(i+":"+a[i]+"\t");
   System.out.println("");
   }
}

  

C:\java>javac Test.java

C:\java>java Test
0:5     1:4     2:3     3:2      4:1  ←コピー前のa
0:1     1:2     2:3     3:4      4:5  ←コピー前のb
0:5     1:4     2:3     3:2      4:1  ←コピー前のa
0:5     1:4     2:3     3:2      4:1  ←コピー前のb(コピーされている)

C:\java>

 
5.2次元配列と多次元配列
 2次元配列とは、配列の配列である。イメージ的には表。1次元配列と同様に、配列を入れるための変数を宣言し、配列領域を確保して変数に代入するとういう手続きが必要になる。
  int a[ ][ ];                           // 2次元配列をいれるための変数
  a = new int[3][4];                // 3行4列の2次元配列領域を確保

  a[0][0] = 10;
  a[0][1] = 20;
  a[1][2] = 30;
  a[2][3] = 40;

  int a[ ][ ] = new int[3][4];     // 変数宣言と領域確保を同時にしてもよい

  a[0][0] = 10;
  a[0][1] = 20;
  a[1][2] = 30;
  a[2][3] = 40;
 

10 20 ? ?  
? ? 30 ?
? ? ? 40
    int a[ ][ ] = { { 0, 1, 2, 3 } , { 4, 5, 6, 7 } , { 8, 9, 10, 11 }  };
    int b[ ][ ] = { { 0            } , { 4, 5,       } , { 8, 9, 10, 11 }  };
    int c[ ][ ] = { { 0, 1, 2, 3 } , { 4, 5, 6, 7 } , {                  }  };
 
配列a(3行4列)   配列b(3行)   配列c(3行)  
0 1 2 3 0 X X X 0 1 2 3 X = 存在しない領域
4 5 6 7 4 5 X X 4 5 6 7
8 9 10 11 8 9 10 11 X X X X