@shimoooon

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Java多次元配列の初期化について

はじめまして。プログラミング初心者です。
教材で勉強していたところ、理解できない箇所があったため質問させていただきました。
以下のコードについてです。
public void Main{
public static void main(String[] args){
int[][] A = {{1,2},{1,2},{1,2,4}};
int total = 0;
for(int[] tmp : A ){
for(int val : tmp){
total += val;
}
}
System.out.println(total);
}
}

こちらのコードを実行すると、13が表示されるとのことですが、
int[][] arrayA = {{1,2},{1,2},{1,2,4}}
でコンパイルエラーにならない理由が理解できません。

二次元配列であるのに関わらず、初期化子の中身が3つあるのでコンパイルエラーとなると思うのですが....。

つたない文章で申し訳ないですが教えていただけますと助かります。

1 likes

1Answer

二次元配列は y行x列 の表形式データに相当します。
yが3行、xが2~3列あるデータを定義しています。

行列 行.length [0]列 [1]列 [2]列
[0]行 2 1 2
[1]行 2 1 2
[2]行 3 1 2 4

二次元配列は「配列の配列」です。
{1,2} は一次元配列。配列の中に数値が沢山入っています。
{{1,2},{1,2},{1,2,4}} で二次元配列。配列の中に配列が沢山入っています。
Javaの多次元配列はジャグ配列といわれるデータ構造で、行ごとに列の要素数を変えることができます。

public class Main {
    public static void main(String[] args){
        int[][] array2d = {{1,2},{1,2},{1,2,4}};
        System.out.println(" y  .length [0] [1] [2]");
        for (int y = 0; y < array2d.length; y++) {
            System.out.printf("[%d]    %d  ", y, array2d[y].length);
            for (int x = 0; x < array2d[y].length; x++) {
                System.out.printf("%4d", array2d[y][x]);
            }
            System.out.println();
        }
    }
}
実行結果
 y  .length [0] [1] [2]
[0]    2     1   2
[1]    2     1   2
[2]    3     1   2   4
5Like

Your answer might help someone💌