java Silverの取得に向けて学習をしていたところ、
多次元配列の初期化の箇所で詰まってしまったのでメモとして残しておきます。
###何が分からなかったか
String[][] array = {{"a","b"},{"c","d","e"},{"f","g","h","i"}};
配列宣言時に[][]
と書いているのに{}{}{}
と括弧の数が対応していないことで混乱し、
何故この配列のコンパイルが通るのかが理解ができなかった...
###どう読み取ればよいか
単純な話でした。
String[][] array = {{"array[0][]"},{"array[1][]"},{"array[2][0]"}};
3つの{}は1次元目の配列の添え字部分に対応しており、
{}内で記述しているa~iの値は1次元目の配列が参照している2次元目の配列の値であるということでした。
public class Main{
public static void main(String[] args) {
String array[][] = {{"a","b"},{"c","d","e"},{"f","g","h","i"}};
System.out.println(array[0][0]); //a
System.out.println(array[0][1]); //b
System.out.println(array[1][0]); //c
System.out.println(array[1][1]); //d
System.out.println(array[1][2]); //e
System.out.println(array[2][0]); //f
System.out.println(array[2][1]); //g
System.out.println(array[2][2]); //h
}
}
実際に各要素をprintlnメソッドで出力してみると、期待した通りの結果が返ってきました。
ちなみに実際に配列の各要素を出力する際は、
public class Main {
public static void main(String[] args) {
String array[][] = { { "a", "b" }, { "c", "d", "e" }, { "f", "g", "h", "i" } };
for(String[] tmp : array) {
for(String s : tmp) {
System.out.println(s);
}
}
}
}
このようにfor文を用いて配列を回す方法の方が一般的。
3次元目以降についても可読性めちゃ悪いですが、ネストさせて下記のように各要素を出力することが可能です。
public class Main {
public static void main(String[] args) {
String array[][][] = { { { "a", "b" }, { "c", "d", "e" } }, { { "f", "g", "h", "i" }, { "j", "k", "l", "m" } },
{ { "n", "o", "p" }, { "q" } } };
for (String[][] s1 : array) {
for (String[] s2 : s1) {
for (String s3 : s2) {
System.out.println(s3);
}
}
}
}
}