Bayangkan kita harus menyimpan nilai ulangan untuk 40 siswa. Tanpa struktur khusus, kita terpaksa mendeklarasikan 40 variabel berbeda, menulis 40 baris kode pembacaan, lalu menjumlahkan semuanya satu per satu. Array menyelesaikan persoalan tersebut dengan menyimpan kumpulan nilai berurutan di bawah satu nama variabel, lalu setiap nilai diakses lewat nomor urut yang disebut indeks. Pada Chapter ini kita akan mendeklarasikan array satu dimensi, mengisi elemennya, membacanya kembali dengan perulangan, dan mengenali jebakan indeks yang paling sering menggagalkan pemula.
Deklarasi dan Pembuatan Array #
Deklarasi array satu dimensi memakai tanda kurung siku ganda pada tipe: int[] nilai berarti “variabel nilai menunjuk ke array bertipe int”. Ekspresi new int[5] meminta JVM menyediakan lima slot memori berurutan, masing-masing cukup untuk satu int, dan mengisi setiap slot dengan nilai default 0. Ukuran array ditentukan sekali saat pembuatan dan tidak bisa diubah setelahnya — bila butuh kapasitas berbeda, kita membuat array baru.
Sifat penting kedua: array memiliki field length yang menyimpan jumlah elemen. Kita tidak perlu menghitung sendiri banyaknya elemen; cukup baca nilai.length tanpa tanda kurung karena length adalah field final, bukan method.
public class ArrayDasar {
public static void main(String[] args) {
int[] nilai = new int[5];
System.out.println("Panjang array: " + nilai.length);
System.out.print("Isi awal : ");
for (int i = 0; i < nilai.length; i++) {
System.out.print(nilai[i] + " ");
}
System.out.println();
nilai[0] = 90;
nilai[1] = 85;
nilai[2] = 78;
nilai[3] = 92;
nilai[4] = 88;
System.out.print("Isi akhir : ");
for (int i = 0; i < nilai.length; i++) {
System.out.print(nilai[i] + " ");
}
System.out.println();
int total = 0;
for (int i = 0; i < nilai.length; i++) {
total += nilai[i];
}
System.out.println("Total nilai : " + total);
System.out.println("Rata-rata : " + (total / nilai.length));
}
}Output yang Dihasilkan:
Panjang array: 5
Isi awal : 0 0 0 0 0
Isi akhir : 90 85 78 92 88
Total nilai : 433
Rata-rata : 86Mari kita telaah baris-baris kode di atas:
- Baris 3 (
int[] nilai = new int[5];): mendeklarasikan variabelnilaibertipe arrayintdan membuat array berisi lima elemen. JVM mengisi kelima slot dengan nilai default0— terlihat pada baris “Isi awal” yang seluruhnya bernilai nol. - Baris 5 (
nilai.length): membaca fieldlengthuntuk mendapatkan jumlah elemen, yaitu5. Perhatikan penulisan tanpa kurung()karenalengthadalah field, bukan method. - Baris 7-9 (perulangan pertama): mengunjungi setiap elemen memakai indeks
idari0sampai4. Kondisii < nilai.lengthmemastikan perulangan berhenti tepat sebelum menyentuh indeks yang tidak sah. - Baris 12-16 (
nilai[0] = 90;dst.): mengisi slot pada posisi tertentu. Tanda kurung siku di sisi kiri menunjuk slot tujuan penugasan. - Baris 24-28 (penjumlahan): accumulator
totalmengumpulkan nilai seluruh elemen, lalu rata-rata dihitung dengan pembagian bulat433 / 5sehingga hasilnya86, bukan86,6.
Indeks Dimulai dari Nol #
Elemen pertama array berada di indeks 0, bukan 1. Konsekuensinya, elemen terakhir sebuah array berisi tiga data menempati indeks length - 1, yaitu 2. Pemetaan untuk array int[] data = {10, 20, 30} tampak seperti tabel berikut:
| Ekspresi | Indeks ditunjuk | Nilai |
|---|---|---|
data[0] | 0 (pertama) | 10 |
data[1] | 1 (tengah) | 20 |
data[2] | 2 (terakhir) | 30 |
data[3] | — | tidak sah |
Penomoran dari nol membuat rumus alamat memori menjadi sederhana: alamat elemen ke-i sama dengan alamat dasar array ditambah i × ukuran elemen. Compiler javac memanfaatkan rumus tersebut saat menerjemahkan data[i] menjadi instruksi akses memori, sehingga tidak ada perhitungan pencarian yang mahal.
Inisialisasi Langsung dengan Kurung Kurawal #
Bila isi array sudah diketahui sejak awal, kita tidak perlu menghitung kapasitas secara manual. Cukup tulis nilai-nilainya di antara kurung kurawal, dan compiler javac menghitung jumlah elemen lalu membuat array dengan ukuran persis tersebut.
public class DaftarNama {
public static void main(String[] args) {
String[] nama = {"Budi", "Siti", "Dewi"};
System.out.println("Jumlah nama: " + nama.length);
for (int i = 0; i < nama.length; i++) {
System.out.println("nama[" + i + "] = " + nama[i]);
}
}
}Output yang Dihasilkan:
Jumlah nama: 3
nama[0] = Budi
nama[1] = Siti
nama[2] = DewiRingkasan bedahnya singkat saja: baris 3 membuat array String berisi tiga referensi menuju literal "Budi", "Siti", dan "Dewi" — compiler menghitung sendiri bahwa length adalah 3. Perulangan kemudian mencetak label indeks berdampingan dengan isi slot, sehingga terlihat jelas bahwa "Budi" menempati nama[0].
Indeks Di Luar Batas #
Apa yang terjadi bila kita tetap memaksa membaca data[3] pada array tiga elemen? Compiler javac tidak bisa menolaknya karena nilai indeks sering kali baru diketahui saat program berjalan. JVM kemudian memeriksa setiap akses: bila indeks negatif atau lebih besar dari length - 1, JVM melempar ArrayIndexOutOfBoundsException dan menghentikan program.
public class AksesDiLuarBatas {
public static void main(String[] args) {
int[] data = {10, 20, 30};
System.out.println("Elemen terakhir (data[2]): " + data[2]);
System.out.println("Mencoba mengakses data[3]...");
System.out.println("Elemen keempat (data[3]): " + data[3]);
}
}Program di atas gagal dengan pesan persis berikut pada jalur keluar (exit code 1):
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
at AksesDiLuarBatas.main(AksesDiLuarBatas.java:7)Dua baris pertama tetap tercetak karena data[2] sah, lalu eksekusi berhenti tepat saat JVM memeriksa akses data[3]. Pesan error menyebutkan dua fakta penting sekaligus: indeks yang diminta (3) dan panjang array yang sebenarnya (3), sehingga kita langsung tahu bahwa indeks sah hanyalah 0 sampai 2.
Dengan fondasi ini, kita sudah bisa menyimpan dan membaca kumpulan data berbentuk baris. Selanjutnya kita akan menaikkan satu tingkat: menyimpan data berbentuk tabel dengan array dua dimensi.
Referensi #
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
AksesDiLuarBatas.java
Unduh berkaspublic class AksesDiLuarBatas {
public static void main(String[] args) {
int[] data = {10, 20, 30};
System.out.println("Elemen terakhir (data[2]): " + data[2]);
System.out.println("Mencoba mengakses data[3]...");
System.out.println("Elemen keempat (data[3]): " + data[3]);
}
}
ArrayDasar.java
Unduh berkaspublic class ArrayDasar {
public static void main(String[] args) {
int[] nilai = new int[5];
System.out.println("Panjang array: " + nilai.length);
System.out.print("Isi awal : ");
for (int i = 0; i < nilai.length; i++) {
System.out.print(nilai[i] + " ");
}
System.out.println();
nilai[0] = 90;
nilai[1] = 85;
nilai[2] = 78;
nilai[3] = 92;
nilai[4] = 88;
System.out.print("Isi akhir : ");
for (int i = 0; i < nilai.length; i++) {
System.out.print(nilai[i] + " ");
}
System.out.println();
int total = 0;
for (int i = 0; i < nilai.length; i++) {
total += nilai[i];
}
System.out.println("Total nilai : " + total);
System.out.println("Rata-rata : " + (total / nilai.length));
}
}
DaftarNama.java
Unduh berkaspublic class DaftarNama {
public static void main(String[] args) {
String[] nama = {"Budi", "Siti", "Dewi"};
System.out.println("Jumlah nama: " + nama.length);
for (int i = 0; i < nama.length; i++) {
System.out.println("nama[" + i + "] = " + nama[i]);
}
}
}