配列型

同じデータ型を持ち,同じような操作を施す複数の変数を統一的に扱うため に配列(array)が用意されている.これまで変数をデータを入れる箱にたとえ てきたが,配列は箱の集合と考えて良い.箱の集合の中で,どの箱を表すかを 添字(index)と呼ばれる0で始まるint型の整数で表す( double型やfloat型の数がたまたま整数だったとしてもそのまま添字に使うことは できません. ) .配列を使う前に箱の集合の大き さ(サイズ)を指定する必要がある.以下の,プログラム
import java.io.*;
public class Add{
  static public void main(String[] argv) throws IOException{
    DataInputStream istream=new DataInputStream(System.in);
    int box1=Integer.parseInt(istream.readLine()); // (1)
    int box2=Integer.parseInt(istream.readLine());
    int sum=box1+box2;
    System.out.println(sum);
  }
}
を配列を用いて書き直した例をあげる.
import java.io.*;
public class AddArray{
  static public void main(String[] argv) throws IOException{
    DataInputStream istream=new DataInputStream(System.in);
    int[] box=new int[2]; // int[] box; box=new int[2]; と同じ意味
    int sum=0; // int sum; sum=0; と同じ意味
    box[0]=Integer.parseInt(istream.readLine());
    sum=sum+box[0]; // sum+=box[0]; と書いても同じ意味
    box[1]=Integer.parseInt(istream.readLine());
    sum=sum+box[1];
    System.out.println(sum);
  }
}
あるデータ型の配列の型の表記は型名の後に '[]'をつける.したがって, box が int 型の配列の型を指す変数だということを宣言するには,
int[] box;
のように書く.

配列のサイズを指定するには,

box=new int[2]; 
のように,new の後に型名を書き, '[',']'の中にサイズを表す.添字は'サイ ズ-1'まで指定でき,それを超える値,負の値を指定するとエラーになる.

配列の要素を参照したり配列の要素に代入する時は,配列型の変数の後ろに' [',']'で囲んで添字を書き,添字によってどの要素かを指定する.添字は int型でなくてはいけない.

float型,double型の変数を添字に使うのはキャスト演算子「(型名)式」でint 型に変換すれば可能だが,そうする必要がある場合の多くはその変数は本来 int型にすべきである.特に,ループの繰り返しを判定する変数などを, float, doubleにすると誤差により,ループの回数が意図しない回数になる可 能性がある.この場合は大(double)は小(int)を兼ねない.


上の例では,配列を使う意味がなかったが,繰り返しをおこなう構文と組み 合わせると,以下のように異なる添字を持つ要素について同じ操作をおこなう ことが簡潔に書け,有効である.
import java.io.*;
public class AddVar{
  static public void main(String[] argv) throws IOException{
    DataInputStream istream=new DataInputStream(System.in);
    System.out.println("Input number of elements");
    int n=Integer.parseInt(istream.readLine());
    int[] box=new int[n]; // (1)
    int sum=0;
    System.out.println("Input numbers");
    int i=0;
    while(i< n){
      box[i]=Integer.parseInt(istream.readLine());
      sum+=box[i];
      i++;
    }
    System.out.println("Result is "+sum);
  }
}

この中で出てくる.i++ という式は,i=i+1 とほぼ同じ意味である.この手 の略記法はC言語にならっている.C言語に由来する略記法としては,

  x = x + y   -> x += y
  x = x - y   -> x -= y
  x = x * y   -> x *= y
  x = x / y   -> x /= y
  x = x % y   -> x %= y
などがある.

ここで導入された while文は

while (条件式) 実行文
という構文を持ち,条件式が成り立つ(評価結果が true になる)ときだけ実行 文を1度実行し,その実行後に再び条件式をチェックする動作を繰り返す.た とえば,nが3の時は,while文の実行結果は
      box[0]=Integer.parseInt(istream.readLine());
      sum+=box[0];
      box[1]=Integer.parseInt(istream.readLine());
      sum+=box[1];
      box[2]=Integer.parseInt(istream.readLine());
      sum+=box[2];
の実行結果と同じになる.

(1)の行のように,配列のサイズは変数で指定することもできるのが,動的メモリ 管理の機能を持つJavaの特徴の1つである.