すべての要素を一度に初期化 - 萌えJava超入門
第二十三章 多次元配列

すべての要素を一度に初期化

すべての要素を一度に初期化します


int[][] array = new int[3][2];
要素数 3 x 2 の intの配列を作る例。

目次


1. すべての要素を一度に初期化する

以下は、二次元配列のすべての要素を一度に初期化する書式です。

書式
  データ型[][] 変数名;
  変数名 = new データ型[要素数1][要素数2];

以下の例では、
  1. 変数 arrays に、要素数が3の配列のインスタンスが代入されます。
  2. 3つのそれぞれの要素に 要素数が2の配列のインスタンスが代入されます。

二次元 int 配列の変数宣言例
  int[][] arrays;
    arrays = new int[3][2];

これでも同じ
int[][] arrays = new int[3][2];


初期化すると表の様な配列になります。
二次元配列の要素のデータ型
変数要素数データ型説明
 arrays3intの配列の配列 二次元配列の変数
 arrays[0]2intの配列 arraysの要素
 arrays[1]2intの配列 arraysの要素
 arrays[2]2intの配列 arraysの要素
 arrays[0][0]int arrays[0]の要素
 arrays[0][1]int arrays[0]の要素
 arrays[1][0]int arrays[1]の要素
 arrays[1][1]int arrays[1]の要素
 arrays[2][0]int arrays[2]の要素
 arrays[2][1]int arrays[2]の要素

つまり、arrays の要素数は3
arrays[0] の要素数は2
arrays[1] の要素数は2
arrays[2] の要素数は2
合計 6つの int型要素を持つ二次元配列に初期化されました。

左側の「[]」(角カッコ)の方が上位になります。

要素数2の配列が
3つあるわけですね。
その通り。
//Sample23_01.java
class Sample23_01{

  public static void main(String[] args){

      int[][] arrays = new int[3][2];

      System.out.println("arrays.length = " + arrays.length);

      System.out.println(
          "arrays[0].length = " + arrays[0].length
      );
      arrays[0][0] = 0;
      arrays[0][1] = 1;

      System.out.println(
          "arrays[1].length = " + arrays[1].length
      );
      arrays[1][0] = 10;
      arrays[1][1] = 11;

      System.out.println(
          "arrays[2].length = " + arrays[2].length
      );
      arrays[2][0] = 20;
      arrays[2][1] = 21;

      System.out.println();
      System.out.println("arrays[0][0] = " + arrays[0][0]);
      System.out.println("arrays[0][1] = " + arrays[0][1]);
      System.out.println("arrays[1][0] = " + arrays[1][0]);
      System.out.println("arrays[1][1] = " + arrays[1][1]);
      System.out.println("arrays[2][0] = " + arrays[2][0]);
      System.out.println("arrays[2][1] = " + arrays[2][1]);
    }
}

コマンドライン
>javac Sample23_01.java
>java Sample23_01
arrays.length = 3
arrays[0].length = 2
arrays[1].length = 2
arrays[2].length = 2

arrays[0][0] = 0
arrays[0][1] = 1
arrays[1][0] = 10
arrays[1][1] = 11
arrays[2][0] = 20
arrays[2][1] = 21




2. 要素への値の代入と参照


もう今更って感じだが、
インデックスを指定すれば
普通の変数同様に扱える。
二次元配列の要素に代入する書式
変数名[インデックス1][インデックス2] = 値;

こんなのもアリだ。
インスタンスの上書き
//Sample23_02.java
class Sample23_02{

  public static void main(String[] args){

      int[][] arrays = new int[3][2];

      System.out.println("arrays.length = " + arrays.length);

      System.out.println(
          "arrays[0].length = " + arrays[0].length
      );
      arrays[0][0] = 0;
      arrays[0][1] = 1;

      System.out.println(
          "arrays[1].length = " + arrays[1].length
      );
      arrays[1][0] = 10;
      arrays[1][1] = 11;

      System.out.println(
          "arrays[2].length = " + arrays[2].length
      );
      arrays[2][0] = 20;
      arrays[2][1] = 21;

      System.out.println();
      System.out.println("arrays[0][0] = " + arrays[0][0]);
      System.out.println("arrays[0][1] = " + arrays[0][1]);
      System.out.println("arrays[1][0] = " + arrays[1][0]);
      System.out.println("arrays[1][1] = " + arrays[1][1]);
      System.out.println("arrays[2][0] = " + arrays[2][0]);
      System.out.println("arrays[2][1] = " + arrays[2][1]);

      /*ここまで同じ*/

      System.out.println();

      arrays[0] = new int[3];//インスタンスの上書き
      System.out.println(
          "arrays[0].length = " + arrays[0].length
      );
      arrays[0][0] = 520;
      arrays[0][1] = 521;
      arrays[0][2] = 522;

      System.out.println();
      System.out.println("arrays[0][0] = " + arrays[0][0]);
      System.out.println("arrays[0][1] = " + arrays[0][1]);
      System.out.println("arrays[0][2] = " + arrays[0][2]);
    }
}

コマンドライン
>javac Sample23_02.java
>java Sample23_02
arrays.length = 3
arrays[0].length = 2
arrays[1].length = 2
arrays[2].length = 2

arrays[0][0] = 0
arrays[0][1] = 1
arrays[1][0] = 10
arrays[1][1] = 11
arrays[2][0] = 20
arrays[2][1] = 21

arrays[0].length = 3

arrays[0][0] = 520
arrays[0][1] = 521
arrays[0][2] = 522

要素数の違う
配列インスタンスを
上書き?
arrays[0] のデータ型は
int配列だから
配列インスタンスを代入できる。


お疲れ様でした。




© 2019 awasekagami