見出し画像

JavaSilverに向けて⑥ 配列

・配列


配列を扱うためのインスタンス。
同じデータ型を使い、同じような目的で利用される変数を数多く必要とする時に配列を使う。
格納する値のデータ型と配列を区別するための配列変数名を指定する必要がある。
配列は、new演算子を使い、要素数を最初に指定する必要がある。
  ー 基本的な配列の形
型名 配列変数名[];
配列変数名 = new 型名[要素数];
*型名 配列変数名[] = new 型名 [要素数];とする事ができる。

int result[] = new int[5];
result[0] = 0;
result[1] = 10;
result[2] = 30;
result[3] = 5;
result[4] = 8;
以下のように、初期値の代入を次のように記述する事もできる。
int result[] = {3, 4, 5, 70, 0};

配列のインスタンスを生成する際は、要素数を指定しなければコンパイルエラーとなる。

  ー 配列の別の宣言の仕方
*型名[] 配列変数名;
int[] a;
a = new int[5];
int[3] aのような以下のものは間違い。
int[3] a;
int a[4];
int[5] a[];
int a[6][];

*型名 配列変数名[];
int a[];

*型名 配列変数名[] = {値1, 値2, …};
int a[] = {10, 20, 30};

*型名 配列変数名[] = new 配列変数名[]{値1, 値2,...};
int[] array = new int[]{2, 3};
上記のように変数宣言と同時に配列の初期化を行った際は、[]の中の要素数を省略できる。逆に、下記のように、要素数を加えてしまうと、コンパイルエラーとなる。
int[] array = new int[2]{2,3}


・配列と参照型


配列は参照型である。
データ型の変数の場合は、変数は値を格納する入れ物。
参照型の変数には、入れ物の位置が格納される。
int a[];
上記は、配列の変数で入れ物の位置が格納されるが、宣言しただけではまだ入れ物が用意されていない。よってこの時点ではnullという特別な値が配列変数に格納されている。
int a[];
a = new int[5];
上記では、new演算子を使って5個の値が格納できる場所が確保されている。また、確保された場所の先頭の場所の配列変数に代入されている。

・参照型変数の値を代入


int a[] = new int[3];
int b[];
b =a;
この場合、どちらの配列変数も同じ場所の位置を持つことになる。全く同じ要素に対して2つの配列変数を使ってアクセスすることができる。

・配列とコンパイルエラー


  ー 要素を指定しない場合
int[] array = new int[];
上記のように、要素数を指定しないとコンパイルエラーになる。
ー要素数を整数値で指定していない場合
int[] array = new int[2.3];
上記のように、小数で指定した場合もコンパイルエラーになる。整数の中でもint型で指定する必要があり、long型で指定するとコンパイルエラーとなる。
  ー 2次元配列の場合、一次元目を指定せず、二次元目の初期化した場合
int[][] array = new int[][3];
上記の場合のように、二次元目のみを初期化するという事はできない。上記はコンパイルエラーとなる。
int[][] array = new int[2][];
逆に、上記のように、一次元目のみを初期化するという事は可能。
  ー 次元数が異なる場合
1次元配列の変数を宣言しているにも関わらず、二次元配列を初期化しようとするとコンパイルエラーとなる。

・多次元配列


  ー 宣言の仕方
*2次元配列の宣言
int[][] arrayA;
int[] arrayA[];
*3次元配列の宣言
int arrayB[][][];
int[][] arrayB[];

  ー 要素の追加
以下の3パターンがある。
int seiseki[][];
seiseki = new int[2][];
int kokugo[];
kokugo[0] = 30;
kokugo[1] = 20;
kokugo[2] = 50;
int suugaku[];
suugaku[0] = 40;
suugaku[1] = 100;
suugaku[2] = 80;
seiseki[0] = kokugo;
seiseki[1] = suugaku;

int seiseki[][];
seiseki = new int[2][];
seiseki[0] = new int[3];
seiseki[1] = new int[3];
seiseki[0][0] = 90;
seiseki[0][1] = 40;
seiseki[0][2] = 80;
seiseki[1][0] = 70;
seiseki[1][1] = 80;
seiseki[1][2] = 90;

int seiseki[][];
seiseki = new int[2][3];
(上記の宣言の部分は、以下のように省略する事も可能。
int seiseki[][] = new int[2][2];)
seiseki[0][0] = 80;
seiseki[0][1] = 50;
seiseki[0][2] = 70;
seiseki[1][0] = 80;
seiseki[1][1] = 80:
seiseki[1][2] = 20;

・多次元配列の初期化


  ー パターン1
型名 配列変数名1[] = {値1, 値2, …};
型名 配列変数名2[] = {値1, 値2, …};
型名 配列変数名[][] = {配列変数名1, 配列変数名2};
  ー パターン2
型名 配列変数名[][] = {{値1_1, 値1_2, …}, {値2_1, 値2_2, …}};
  ー パターン3
int num[][] = new int[2][3];
num[0][0]=10;
num[0][1]=1;
num[1][0]=10;
num[1][1]=30;
num[2][0]=50;
num[2][1]=80;


この記事が気に入ったらサポートをしてみませんか?