Thinkers'Studio
JavaとC言語の自習ツール
2次元配列の初期化、メソッドに渡すサンプル (Java版)

 2次元配列の初期化や、メソッドに渡すときの引数宣言の書き方サンプルです。

2次元配列の初期化、メソッドに渡すサンプル 】
 バスの空き座席を数えるプログラムです。 先頭列が 3席、最後尾が 5席、その間にある 14列は各4席のバスとします。
 その座席表を 2次元配列 seats として mainで初期化し、メソッド notReservedCnt に渡します。
 呼び出されたメソッドでは、2次元配列中の 0(空き座席)の数を数えて返します。
class ReservedSeat {
    static int notReservedCnt( int[][] seats ) {
        int cnt = 0;

        for( int i = 0; i < seats.length; i++ ) {
            for( int j = 0; j < seats[i].length; j++ ) {
                if( seats[i][j] == 0 ) cnt++;
            }
        }
        return cnt;
    }

    public static void main( String[] args ) {
        int[][] seats =
           { { 1,0,0 },   { 0,0,0,1 }, { 1,0,0,0 }, { 1,1,0,1 }      //先頭は3席
           , { 1,0,1,1 }, { 1,1,1,1 }, { 1,1,1,1 }, { 0,1,1,1 }
           , { 0,1,1,1 }, { 1,1,1,1 }, { 1,1,0,1 }, { 1,1,0,0 }
           , { 1,1,1,1 }, { 1,1,1,1 }, { 1,1,1,1 }, { 1,0,0,0,1 } }; //末尾は5席

        int cnt = notReservedCnt( seats );
        System.out.println( "空き座席数 = " + cnt );
    }
}

2次元配列の初期化、メソッドとの受け渡し

2次元配列の初期化

 { } の中に、下位の配列要素の値を指定し、それらを並べたものを { と } で囲んで、配列の配列を指定します。
 初期化子を指定する場合、その個数で自動的に領域が取られるので要素数は指定しません。 Java では、上の例のように異なる配列サイズのものを配列にまとめることができます。int[16][5] seats = { { 1,0,0 }, .. }; など、初期化子とともに [ ] 内にサイズを書くとコンパイル・エラーになります。

2次元配列をメソッドに渡す

 引数宣言は 2次元配列で書きます。こちらも要素数は書きません。
 配列の要素数は、配列名.length で分かります。 上の例で seats.length は 16、seats[0].length は 3、seats[15].length は 5、seats[1].length 〜 seats[14].length は 4です。配列サイズが異なる場合も、各要素を漏れなく参照できます。

(今回のクイズです)
 上のプログラムで、バスを2台にします。そして3次元配列を使うものとします。
 初期化の仕方やメソッドの引数宣言、処理をどのように変えればよいか考えてみてください。
   (答えは、次回の Java の Tips で ・・・)

[ 関連記事 ] 2次元配列の使用例

前回のクイズの答え: (前回の問題を見る
(1)  int x1 = (int)( d < 0.0 ? d : d+0.9 );
(2)  int x2 = (int)( d < 0.0 ? d-0.9 : d );
切り上げは、元の値に 0.9 を足し int型にキャストして小数点以下を切り捨てるので、ひとつ大きな整数となります。 切り捨ては、そのままキャストします。 負の値をキャストすると 0 に近い方に切り捨てられるので、切り上げでは 0.9 を足さず、切り捨てでは逆に 0.9 引いてキャストしています。