Data di dunia nyata sering berbentuk tabel: nilai siswa per mata pelajaran, papan catur, atau koordinat peta. Array satu dimensi hanya merepresentasikan satu baris data, sedangkan tabel membutuhkan baris dan kolom sekaligus. Java tidak memiliki “array dua dimensi” sebagai tipe terpisah — Java membangunnya sebagai array dari array: satu array yang setiap elemennya adalah array lain. Pada Chapter ini kita akan membuat matriks, membacanya dengan perulangan bersarang, lalu memanfaatkan sifat “array dari array” untuk membangun jagged array yang tiap barisnya berbeda panjang.

Membuat Array Dua Dimensi #

Deklarasi array dua dimensi memakai dua pasang kurung siku: int[][] matriks. Pembuatannya pun berlapis — new int[3][3] membuat tiga array baris, masing-masing berisi tiga kolom. Karena setiap baris adalah array tersendiri, matriks.length menyatakan jumlah baris, sedangkan matriks[0].length menyatakan jumlah kolom pada baris pertama.

java Matriks.java
public class Matriks {
    public static void main(String[] args) {
        int[][] matriks = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };

        System.out.println("Jumlah baris      : " + matriks.length);
        System.out.println("Jumlah kolom baris: " + matriks[0].length);

        for (int baris = 0; baris < matriks.length; baris++) {
            for (int kolom = 0; kolom < matriks[baris].length; kolom++) {
                System.out.print(matriks[baris][kolom] + " ");
            }
            System.out.println();
        }

        int diagonal = matriks[0][0] + matriks[1][1] + matriks[2][2];
        System.out.println("Jumlah diagonal utama: " + diagonal);

        int[][] papan = new int[2][3];
        papan[1][2] = 7;
        System.out.println("papan[1][2] = " + papan[1][2]);
        System.out.println("papan[0][0] = " + papan[0][0] + " (nilai default)");
    }
}

Output yang Dihasilkan:

text
Jumlah baris      : 3
Jumlah kolom baris: 3
1 2 3 
4 5 6 
7 8 9 
Jumlah diagonal utama: 15
papan[1][2] = 7
papan[0][0] = 0 (nilai default)

Mari kita telaah baris-baris kode di atas:

  1. Baris 3-7 (int[][] matriks = {...}): membuat array berisi tiga elemen, dan tiap elemen adalah array int berisi tiga angka. Bentuk baris-per-baris pada penulisan hanyalah gaya agar mudah dibaca; Java tidak peduli bagaimana kita meratakan spasi.
  2. Baris 9-10 (matriks.length dan matriks[0].length): matriks.length menghitung jumlah baris (3), sedangkan matriks[0].length membaca panjang array pada baris pertama, juga 3. Dua ukuran tersebut berbeda konsep — satu menghitung array luar, satu mengukur array dalam.
  3. Baris 12-17 (perulangan bersarang): loop luar berjalan per baris, loop dalam berjalan per kolom pada baris tersebut. Ekspresi matriks[baris][kolom] berarti “ambil elemen ke-baris, lalu ambil elemen ke-kolom dari array tersebut”.
  4. Baris 19-20 (diagonal utama): mengakses matriks[0][0], matriks[1][1], matriks[2][2] — elemen yang nomor baris dan kolomnya sama, menghasilkan 1 + 5 + 9 = 15.
  5. Baris 22-25 (new int[2][3]): membuat array 2×3 yang seluruh elemennya masih bernilai default 0. Penugasan papan[1][2] = 7 hanya mengisi satu sel, sementara papan[0][0] tetap 0.

Jagged Array dengan Baris Tak Seragam #

Karena array dua dimensi sesungguhnya “array dari array”, tidak ada kewajiban seluruh baris sama panjang. Struktur semacam ini disebut jagged array dan dibuat dengan hanya menentukan jumlah baris: new int[4][]. Setiap baris kemudian dibuat terpisah dengan ukuran bebas — cocok untuk data bertingkat seperti struktur segitiga atau daftar nilai per kelas yang jumlah siswanya berbeda.

java JaggedArray.java
public class JaggedArray {
    public static void main(String[] args) {
        int[][] segitiga = new int[4][];

        for (int i = 0; i < segitiga.length; i++) {
            segitiga[i] = new int[i + 1];
            for (int j = 0; j < segitiga[i].length; j++) {
                segitiga[i][j] = j + 1;
            }
        }

        for (int[] baris : segitiga) {
            for (int angka : baris) {
                System.out.print(angka + " ");
            }
            System.out.println();
        }
    }
}

Output yang Dihasilkan:

text
1 
1 2 
1 2 3 
1 2 3 4 

Bedah singkatnya: baris 3 membuat array luar berisi empat slot yang masing-masing masih null. Loop pertama (baris 5-10) mengisi setiap slot dengan array baru bervariasi — baris ke-i dibuat dengan panjang i + 1, sehingga panjang baris bertambah dari 1 sampai 4. Loop kedua (baris 12-17) memakai enhanced for dua tingkat: loop luar mengambil tiap baris sebagai int[] baris, loop dalam membaca angkanya satu per satu. Hasilnya membentuk segitiga angka yang melebar ke bawah.

Dimensi lebih dari dua juga sah — int[][][] kubus adalah array dari array dari array, dan pola pikirnya sama persis. Namun dalam praktik, struktur tiga dimensi ke atas jarang dipakai dan biasanya digantikan class buatan sendiri yang lebih mudah dibaca. Setelah menguasai pembuatan array, pertanyaan berikutnya adalah bagaimana mengisinya secara ringkas — materi Chapter Array Initialization.

Referensi #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

JaggedArray.java

Unduh berkas
java
public class JaggedArray {
    public static void main(String[] args) {
        int[][] segitiga = new int[4][];

        for (int i = 0; i < segitiga.length; i++) {
            segitiga[i] = new int[i + 1];
            for (int j = 0; j < segitiga[i].length; j++) {
                segitiga[i][j] = j + 1;
            }
        }

        for (int[] baris : segitiga) {
            for (int angka : baris) {
                System.out.print(angka + " ");
            }
            System.out.println();
        }
    }
}

Matriks.java

Unduh berkas
java
public class Matriks {
    public static void main(String[] args) {
        int[][] matriks = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };

        System.out.println("Jumlah baris      : " + matriks.length);
        System.out.println("Jumlah kolom baris: " + matriks[0].length);

        for (int baris = 0; baris < matriks.length; baris++) {
            for (int kolom = 0; kolom < matriks[baris].length; kolom++) {
                System.out.print(matriks[baris][kolom] + " ");
            }
            System.out.println();
        }

        int diagonal = matriks[0][0] + matriks[1][1] + matriks[2][2];
        System.out.println("Jumlah diagonal utama: " + diagonal);

        int[][] papan = new int[2][3];
        papan[1][2] = 7;
        System.out.println("papan[1][2] = " + papan[1][2]);
        System.out.println("papan[0][0] = " + papan[0][0] + " (nilai default)");
    }
}