Anda di halaman 1dari 26

LECTURE NOTES

Introduction to Programming
Week ke - 8

Array
LEARNING OUTCOMES

1. Peserta diharapkan mampu merancang dan aplikasikan algoritma yang benar untuk
menyelesaikan masalah menggunakan java

OUTLINE MATERI :

1. Array Basic

2. Copying arrays

3. Passing arrays to method

4. Returning an array

5. Two dimensional Array

6. Processing two dimensional arrays

7. Passing Two Dimensional Arrays to methods


ISI MATERI
1. Array Basic

Array digunakan untuk menyimpan kumpulan data, tetapi seringkali kita merasa lebih
berguna untuk menganggap array sebagai kumpulan variabel dengan tipe yang sama. Alih-
alih mendeklarasikan variabel individual, seperti number0, number1, . . . , dan number99,
Anda mendeklarasikan satu variabel array seperti angka dan menggunakan angka[0],
angka[1], . . . , dan angka[99] untuk mewakili variabel individu. Bagian ini memperkenalkan
cara mendeklarasikan variabel array, membuat array, dan memproses array menggunakan
indeks.
a. Declaring Array Variable.

Untuk menggunakan array dalam sebuah program, Anda harus mendeklarasikan


variabel untuk mereferensikan array dan menentukan tipe elemen array. Berikut
adalah sintaks untuk mendeklarasikan variabel array.
elementType[] arrayRefVar;

or

elementType arrayRefVar[]; // Allowed, but not preferred


ElementType dapat berupa tipe data apa pun, dan semua elemen dalam array akan
memiliki tipe data yang sama. Misalnya, kode berikut mendeklarasikan variabel
myList yang mereferensikan array elemen double.

double[] myList;

or

double myList[]; // Allowed, but not preferred

Introduction to Programming
b. Creating Arrays

Tidak seperti deklarasi untuk variabel tipe data primitif, deklarasi variabel array
tidak mengalokasikan ruang apapun dalam memori untuk array. Itu hanya
membuat lokasi penyimpanan untuk referensi ke array. Jika variabel tidak
mengandung referensi ke array, nilai variabel adalah null. Anda tidak dapat
menetapkan elemen ke array kecuali jika sudah dibuat. Setelah variabel array
dideklarasikan, Anda dapat membuat array dengan menggunakan operator new
dan menetapkan referensinya ke variabel dengan sintaks berikut:

arrayRefVar = new elementType[arraySize];

Statement ini melakukan dua hal: (1) membuat array menggunakan new
elementType[arraySize] dan (2) memberikan referensi array yang baru dibuat ke
variabel arrayRefVar. Mendeklarasikan variabel array, membuat array, dan
menetapkan referensi array ke variabel dapat digabungkan dalam satu pernyataan
sebagai

elementType[] arrayRefVar = new elementType[arraySize];

atau

elementType arrayRefVar[] = new elementType[arraySize];

Berikut adalah contoh pernyataan seperti itu:

double[] myList = dobel baru[10];

Introduction to Programming
Statement ini mendeklarasikan variabel array, myList, membuat array 10 elemen
bertipe ganda, dan memberikan referensinya ke myList. Untuk menetapkan nilai
ke elemen, gunakan sintaks

arrayRefVar[indeks] = nilai;

Misalnya, kode berikut menginisialisasi array:

myList[0] = 5.6;

myList[1] = 4,5;

myList[2] = 3.3;

myList[3] = 13.2;

myList[4] = 4.0;

myList[5] = 34,33;

myList[6] = 34.0;

myList[7] = 45,45;

myList[8] = 99,993;

myList[9] = 11123;

Array ini diilustrasikan pada Gambar dibawah

Introduction to Programming
Gambar 1.1 Input Data Array

c. Array Size And Default Values


Ketika ruang untuk array dialokasikan, ukuran array harus diberikan, menentukan
jumlah elemen yang dapat disimpan di dalamnya. Ukuran array tidak dapat
diubah setelah array dibuat. Ukuran dapat diperoleh dengan menggunakan
arrayRefVar.length. Misalnya, myList.length adalah 10. Ketika sebuah array
dibuat, elemen-elemennya diberi nilai default 0 untuk tipe data primitif numerik,
\u0000 untuk tipe char, dan false untuk tipe boolean.

d. Accessing Array element


Elemen array diakses melalui index. Indeks array berbasis 0; yaitu, rentangnya
dari 0 hingga arrayRefVar.length 1. Dalam contoh di Gambar 7.1, myList
menampung 10 nilai ganda, dan indeksnya dari 0 hingga 9.

Setiap elemen dalam array direpresentasikan menggunakan sintaks berikut, yang


dikenal sebagai variabel terindeks:

arrayRefVar[indeks];

Misalnya, myList[9] mewakili elemen terakhir dalam array myList.

Introduction to Programming
Variabel yang diindeks dapat digunakan dengan cara yang sama seperti variabel
biasa. Misalnya, kode berikut menambahkan nilai dalam myList[0] dan myList[1]
ke myList[2]:

myList[2] = myList[0] + myList[1];

Loop berikut menetapkan 0 ke myList[0], 1 ke myList[1], . . . , dan 9 ke


myList[9]:

for (int i = 0; i < myList.length; i++) {

myList[i] = i;

e. Array Initializers

Java memiliki notasi singkatan, yang dikenal sebagai penginisialisasi array, yang
menggabungkan deklarasi, pembuatan, dan inisialisasi array dalam satu
pernyataan menggunakan sintaks berikut:

elementType[] arrayRefVar = {nilai0, nilai1, ..., nilaik};

Misalnya pernyataan

double[] myList = {1.9, 2.9, 3.4, 3.5};

mendeklarasikan, membuat, dan menginisialisasi array myList dengan empat


elemen, yang setara dengan pernyataan berikut:

double[] myList = dobel baru[4];

myList[0] = 1.9;

myList[1] = 2,9;

Introduction to Programming
myList[2] = 3.4;

myList[3] = 3.5;

Kode di bawah ini adalah cara yang salah

double[] myList;

myList = {1.9, 2.9, 3.4, 3.5}; // Salah

f. Processing Arrays
Saat memproses elemen array, Anda akan sering menggunakan perulangan for
karena salah satu dari dua alasan:

i. Semua elemen dalam array bertipe sama. Mereka diproses secara merata
dengan cara yang sama berulang kali menggunakan loop.

ii. Karena ukuran array diketahui, maka perulangan for digunakan secara
alami. Asumsikan bahwa array dibuat sebagai berikut: double[] myList =
new double[10];

Berikut ini adalah beberapa contoh array pemrosesan:

i. Menginisialisasi array dengan nilai input: Loop berikut menginisialisasi


array myList dengan nilai input pengguna:

input java.util.Scanner = new java.util.Scanner(System.in);


System.out.print("Masukkan " + myList.length + " nilai: ");
for (int i = 0; i < myList.length; i++)
myList[i] = input.nextDouble();

ii. Menginisialisasi array dengan nilai acak: Loop berikut menginisialisasi


array myList dengan nilai acak antara 0,0 dan 100,0, tetapi kurang dari
100,0:

Introduction to Programming
for (int i = 0; i < myList.length; i++) {

myList[i] = Math.random() * 100;

iii. Menampilkan array: Untuk mencetak array, Anda harus mencetak setiap
elemen dalam array menggunakan loop seperti berikut:

for (int i = 0; i < myList.length; i++) {

System.out.print(daftarsaya[i] + " ");

iv. Menjumlahkan semua elemen: Gunakan variabel bernama total untuk


menyimpan jumlah. Awalnya total adalah 0. Tambahkan setiap elemen
dalam array ke total menggunakan loop seperti berikut:

jumlah ganda = 0;

for (int i = 0; i < myList.length; i++) {

total += Daftarku[i];

v. Menemukan elemen terbesar: Gunakan variabel bernama max untuk


menyimpan elemen terbesar. Awalnya maks adalah myList[0]. Untuk
menemukan elemen terbesar dalam array myList, bandingkan setiap
elemen dengan maks, dan perbarui maks jika elemen lebih besar dari
maks.

maks ganda = myList[0];

for (int i = 1; i < myList.length; i++) {

jika (myList[i] > maks)

Introduction to Programming
max = myList[i];

vi. Menemukan indeks terkecil dari elemen terbesar: Seringkali Anda perlu
mencari elemen terbesar dalam sebuah array. Jika sebuah array memiliki
beberapa elemen dengan nilai terbesar yang sama, temukan indeks terkecil
dari elemen tersebut. Misalkan array myList adalah {1, 5, 3, 4, 5, 5}.
Elemen terbesar adalah 5, dan indeks terkecil untuk 5 adalah 1. Gunakan
variabel bernama max untuk menyimpan elemen terbesar, dan variabel
bernama indexOfMax untuk menunjukkan indeks elemen terbesar.
Awalnya max adalah myList[0] dan indexOfMax adalah 0. Bandingkan
setiap elemen di myList dengan max dan perbarui max dan indexOfMax
jika elemen lebih besar dari max.

double max = myList[0];

int indexOfMax = 0;

for (int i = 1; i < myList.length; i++) {

if (myList[i] > max) {

max = myList[i];

indexOfMax = i;

vii. Mengacak secara random: Dalam banyak aplikasi, Anda perlu


mengurutkan ulang elemen dalam array secara acak. Ini disebut
pengocokan. Untuk melakukannya, untuk setiap elemen myList[i], buat
indeks j secara acak dan tukar myList[i] dengan myList[j], sebagai

Introduction to Programming
berikut:

for (int i = 0;i< myList.length – 1; i++) {

// Hasilkan indeks j secara acak

int j=(int)(Math.random() * myList.length);

// Tukar myList[i] dengan myList[j]

double temp = myList[i];

myList[i] = myList[j];

myList[j] = temp;

viii. Menggeser elemen: Terkadang Anda perlu menggeser elemen ke kiri atau
ke kanan. Berikut adalah contoh menggeser elemen satu posisi ke kiri dan
mengisi elemen terakhir dengan elemen pertama:

double temp = myList[0]; // Pertahankan elemen pertama

// Geser elemen ke kiri

for (int i = 1; i < myList.length; i++) {

myList[i - 1] = myList[i];

} // Pindahkan elemen pertama untuk mengisi posisi terakhir

Introduction to Programming
myList[myList.length - 1] = temp;

ix. Menyederhanakan coding: Array dapat digunakan untuk sangat


menyederhanakan coding untuk tugas-tugas tertentu. Misalnya, Anda
ingin mendapatkan nama bahasa Inggris dari bulan tertentu dengan
nomornya. Jika nama bulan disimpan dalam array, nama bulan untuk
bulan tertentu dapat diakses hanya melalui indeks. Kode berikut meminta
pengguna untuk memasukkan nomor bulan dan menampilkan nama
bulannya:
String[] months = {"January", "February",..., "December"};

System.out.print("Enter a month number (1 to 12): ");

int monthNumber = input.nextInt();

System.out.println("The month is " + months[monthNumber − 1]);


Jika Anda tidak menggunakan array bulan, Anda harus menentukan nama
bulan menggunakan pernyataan if−else multiway yang panjang sebagai
berikut:
if (monthNumber == 1)

System.out.println("The month is January");

else if (monthNumber == 2)

System.out.println("The month is February");

...

else

System.out.println("The month is December");

Introduction to Programming
2. Copying arrays.

Seringkali, dalam sebuah program, Anda perlu menduplikasi array atau bagian dari array.
Dalam kasus seperti itu, Anda dapat mencoba menggunakan pernyataan penetapan (=),
sebagai berikut:

list2 = list1;

Namun, pernyataan ini tidak menyalin isi array yang direferensikan oleh list1 ke list2,
melainkan hanya menyalin nilai referensi dari list1 ke list2. Setelah pernyataan ini, list1 dan
list2 mereferensikan array yang sama, seperti yang ditunjukkan pada Gambar di bawah.
Array yang sebelumnya direferensikan oleh list2 tidak lagi direferensikan; itu menjadi
sampah, yang akan secara otomatis dikumpulkan oleh Java Virtual Machine. Proses ini
disebut pengumpulan sampah.

Gambar 1.2 Before and after Assignment

Di Java, Anda dapat menggunakan assignment Statement untuk menyalin variabel tipe data
primitif, tetapi bukan array. Menetapkan satu variabel array ke variabel array lain sebenarnya
menyalin satu referensi ke referensi lain dan membuat kedua variabel menunjuk ke lokasi
memori yang sama. Ada tiga cara untuk menyalin array:

1. Gunakan loop untuk menyalin elemen individual satu per satu.

2. Gunakan metode static arraycopy di kelas System.

Introduction to Programming
3. Gunakan metode kloning untuk menyalin array.

Anda dapat menulis loop untuk menyalin setiap elemen dari array sumber ke elemen yang
sesuai dalam array target. Kode berikut, misalnya, menyalin sourceArray ke targetArray
menggunakan for loop:

int[] sourceArray = {2, 3, 1, 5, 10};

int[] targetArray = new int[sourceArray.length];

for (int i = 0; i < sourceArray.length; i++) {

targetArray[i] = sourceArray[i];

}
Pendekatan lain adalah dengan menggunakan metode arraycopy di kelas java.lang.System
untuk menyalin array daripada menggunakan loop. Sintaks untuk arraycopy adalah:

arraycopy(sourceArray, srcPos, targetArray, tarPos, length);

Parameter srcPos dan tarPos masing-masing menunjukkan posisi awal di sourceArray dan
targetArray. Jumlah elemen yang disalin dari sourceArray ke targetArray ditunjukkan oleh
panjangnya. Misalnya, Anda dapat menulis ulang loop menggunakan pernyataan berikut:

System.arraycopy(sourceArray, 0, targetArray, 0, sourceArray.length);

Metode arraycopy tidak mengalokasikan ruang memori untuk array target. Array target harus
sudah dibuat dengan ruang memori yang dialokasikan. Setelah penyalinan terjadi,
targetArray dan sourceArray memiliki konten yang sama tetapi lokasi memori independen.

Introduction to Programming
3. Passing arrays to method
Sama seperti Anda dapat meneruskan nilai tipe primitif ke metode, Anda juga bisa
meneruskan array ke metode. Misalnya, metode berikut menampilkan elemen dalam
array int:

public static void printArray(int[] array) {

for (int i = 0; i < array.length; i++) {

System.out.print(array[i] + " ");

Anda dapat memanggilnya dengan melewatkan sebuah array. Misalnya, pernyataan


berikut memanggil metode printArray untuk menampilkan 3, 1, 2, 6, 4, dan 2.

printArray(int baru[]{3, 1, 2, 6, 4, 2});

Java menggunakan pass-by-value untuk meneruskan argumen ke suatu metode. Ada


perbedaan penting antara melewatkan nilai variabel tipe data primitif dan melewatkan
array.

• Untuk argumen tipe primitif, argumennilai 's dilewatkan.

• Untuk argumen tipe array, nilai argumen adalah referensi ke array;

nilai referensi ini diteruskan ke metode. Secara semantik, ini dapat digambarkan sebagai
pass-by-sharing, yaitu array dalam metode ini sama dengan array yang dilewatkan. Jadi,
jika Anda mengubah array dalam metode, Anda akan melihat perubahan di luar metode.
Ambil kode berikut, misalnya:
public class TestArrayArguments {

public static void main(String[] args) {

Introduction to Programming
int x = 1; // x represents an int value

int[] y = new int[10]; // y represents an array of int values

m(x, y); // Invoke m with arguments x and y

System.out.println("x is " + x);

System.out.println("y[0] is " + y[0]);

public static void m(int number, int[] numbers) {

number = 1001; // Assign a new value to number

numbers[0] = 5555; // Assign a new value to numbers[0]

Anda mungkin bertanya-tanya mengapa setelah m dipanggil, x tetap 1, tetapi y[0]


menjadi 5555. Ini karena y dan angka, meskipun mereka adalah variabel independen,
merujuk pada array yang sama, seperti yang diilustrasikan pada Gambar di bawah. Ketika
m(x, y) dipanggil, nilai x dan y diteruskan ke angka dan angka. Karena y berisi nilai
referensi ke array, angka sekarang berisi nilai referensi yang sama ke array yang sama.

Introduction to Programming
Gambar 1.3 Stack Heap.

4. Returning an array

Anda dapat melewatkan array saat menjalankan metode. Sebuah metode juga dapat
mengembalikan sebuah array. Misalnya, metode berikut mengembalikan array yang
merupakan kebalikan dari array lain.

Gambar 1.4 Returning Array

Baris 2 membuat hasil array baru. Baris 4–7 menyalin elemen dari array list ke array result.
Baris 9 mengembalikan array. Misalnya, pernyataan berikut mengembalikan array baru list2
dengan elemen 6, 5, 4, 3, 2, 1:

int[] list1 = {1, 2, 3, 4, 5, 6};

int[] list2 = reverse(list1);

Introduction to Programming
5. Two dimensional Array

Mendeklarasikan Variabel Array Dua Dimensi dan Membuat Array Dua Dimensi Sintaks
untuk mendeklarasikan array dua dimensi adalah sebagai berikut:

elementType[][] arrayRefVar; atau

elementType arrayRefVar[][]; // Diizinkan, tetapi tidak disukai

Sebagai contoh, berikut adalah bagaimana Anda akan mendeklarasikan matriks variabel
array dua dimensi dengan nilai int:

int[][] matrix;

atau
int matriks[][]; // Gaya ini diperbolehkan, tetapi tidak disukai
Anda dapat membuat larik dua dimensi dengan nilai int 5-kali-5 dan menetapkannya ke
matriks menggunakan sintaks ini: matrix = new int[5][5]; Dua subskrip digunakan dalam
larik dua dimensi: satu untuk baris, dan yang lainnya untuk kolom. Kedua subskrip
tersebut dengan mudah disebut indeks baris dan indeks kolom. Seperti dalam array satu
dimensi, indeks untuk setiap subskrip bertipe int dan dimulai dari 0

Gambar 1.5 Two Dimensional Array

Anda juga dapat menggunakan penginisialisasi array untuk mendeklarasikan, membuat,


dan menginisialisasi array dua dimensi.

Introduction to Programming
Gambar 1.6 Code Equivalent Input 2 dimensional array

6. Processing two dimensional arrays

Misalkan matriks array dibuat sebagai berikut:


int[][] matrix = new int[10][10];

Berikut ini adalah beberapa contoh pemrosesan array dua dimensi.

a. Inisialisasi array dengan nilai input. Loop berikut menginisialisasi array dengan
nilai input pengguna:
java.util.Scanner input = new java.util.Scanner(System.in);

System.out.println("Enter " + matrix.length + " rows and " + matrix[0].length + "


columns: ");

for (int row = 0; row < matrix.length; row++) {

for (int column = 0; column < matrix[row].length; column++) {

matrix[row][column] = input.nextInt();

Introduction to Programming
b. Inisialisasi array dengan nilai acak. Loop berikut menginisialisasi array dengan
nilai acak antara 0 dan 99:
for (int row = 0; row < matrix.length; row++) {

for (int column = 0; column < matrix[row].length; column++) {

matrix[row][column] = (int)(Math.random() * 100);

c. Mencetak array. Untuk mencetak array dua dimensi, Anda harus mencetak setiap
elemen dalam array menggunakan loop seperti loop berikut:

for (int row = 0; row < matrix.length; row++) {

for (int column = 0; column < matrix[row].length; column++) {


System.out.print(matrix[row][column] + " ");

} System.out.println();

d. Menjumlahkan semua elemen. Gunakan variabel bernama total untuk menyimpan


jumlah. Awalnya total adalah 0. Tambahkan setiap elemen dalam array ke total
menggunakan loop seperti ini
int total = 0;

for (int row = 0; row < matrix.length; row++) {

for (int column = 0; column < matrix[row].length; column++) {

total += matrix[row][column];

Introduction to Programming
e. Menjumlahkan elemen dari kolom. Untuk setiap kolom, gunakan variabel
bernama total untuk menyimpan jumlahnya. Tambahkan setiap elemen di kolom
menjadi total menggunakan loop seperti ini:
for (int column = 0; column < matrix[0].length; column++) {

int total = 0;

for (int row = 0; row < matrix.length; row++)

total += matrix[row][column];

System.out.println("Sum for column " + column + " is " + total); }

f. Row mana yang memiliki jumlah terbesar? Gunakan variabel maxRow dan
indexOfMaxRow untuk melacak jumlah dan indeks terbesar dari baris. Untuk
setiap baris, hitung jumlah dan perbarui maxRow dan indexOfMaxRow jika
jumlah baru lebih besar.
int maxRow = 0;

int indexOfMaxRow = 0;

// Get sum of the first row in maxRow

for (int column = 0; column < matrix[0].length; column++) {

maxRow += matrix[0][column];

for (int row = 1; row < matrix.length; row++) {

int totalOfThisRow = 0;

for (int column = 0; column < matrix[row].length; column++)

totalOfThisRow += matrix[row][column];

Introduction to Programming
if (totalOfThisRow > maxRow) {

maxRow = totalOfThisRow;

indexOfMaxRow = row;

System.out.println("Row " + indexOfMaxRow + " has the maximum sum of " +


maxRow);

g. Random shuffling : Bagaimana Anda mengacak semua elemen dalam array dua
dimensi? Untuk melakukannya, untuk setiap elemen matriks[i][j], buat secara
acak indeks i1 dan j1 dan tukar matriks[i][j] dengan matriks[i1][j1], sebagai
berikut:
for (int i = 0; i < matrix.length; i++) {

for (int j = 0; j < matrix[i].length; j++) {

int i1 = (int)(Math.random() * matrix.length);

int j1 = (int)(Math.random() * matrix[i].length); // Swap matrix[i][j] with


matrix[i1][j1]

int temp = matrix[i][j];

matrix[i][j] = matrix[i1][j1];

matrix[i1][j1] = temp; } }

7. Passing Two Dimensional Arrays to methods

Anda dapat meneruskan array dua dimensi ke suatu metode sama seperti Anda meneruskan
array satu dimensi. Anda juga dapat mengembalikan array dari suatu metode. Coding di
bawah ini memberikan contoh dengan dua metode. Metode pertama, getArray(),

Introduction to Programming
mengembalikan array dua dimensi dan metode kedua, sum(int[][] m), mengembalikan jumlah
semua elemen dalam matriks.

Metode getArray meminta pengguna memasukkan nilai untuk array(baris 11-24) dan
mengembalikan array (baris 23).

Introduction to Programming
Metode sum (baris 26–35) memiliki argumen array dua dimensi. Anda dapat memperoleh
jumlah baris menggunakan m.length (baris 28), dan jumlah kolom dalam baris tertentu
menggunakan m[row].length (baris 29).

Introduction to Programming
SIMPULAN

Penggunaan variabel dengan jumlah yang banyak dan tipe data yang sama terkadang diperlukan
dalam pembuatan sebuah program. Untuk menangani hal tersebut maka dapat digunakan array.
Variabel array berisi referensi ke array. Akan tetapi, array yang bersifat statis ini tidak cukup
baik dalam mengelola aplikasi transaksional dikarenakan data transaksional akan bersifat
dinamis dan terus bertambah oleh karena itu perlu mempelajari array dinamis, yakni ArrayList
dan Vector. Untuk penggunaan yang lebih aman dengan adanya fitur sinkronisasi maka
disarankan untuk dapat menerapkan Vector dalam pengembangan aplikasi nantinya

Introduction to Programming
DAFTAR PUSTAKA

1. Y. Daniel Liang. (2020). Introduction to Java programming and Data Structures :


comprehensive version. international edition. 12. Pearson Education. New Jersey. ISBN:
9780136520238, Chapter 7 , Chapter 8

Introduction to Programming

Anda mungkin juga menyukai