Anda di halaman 1dari 159

LECTURE NOTES

Introduction to Programming
Week ke - 1

Introduction Algorithm and Java


Programming
LEARNING OUTCOMES

1. Peserta diharapkan dapat mengerti dasar dasar java programming dan konsep objek oriented

OUTLINE MATERI :

1. Definisi algoritma

2. Bahasa Pemrograman

3. Pseudocode

4. Flowchart

5. NS Diagram

6. Bahasa java spesifikasi API, JDK , JRE dan IDE

7. Programming Style

8. Programming Error
ISI MATERI

A. Definisi Algoritma

Algoritma adalah setiap prosedur komputasi yang terdefinisi dengan baik yang
mengambil beberapa nilai, atau set nilai, sebagai input dan menghasilkan beberapa
nilai, atau set nilai, sebagai output. Dengan demikian, algoritma adalah urutan
langkah-langkah komputasi yang mengubah input menjadi output. Kita juga dapat
melihat algoritma sebagai alat untuk memecahkan masalah komputasi yang
ditentukan dengan baik. Pernyataan masalah menentukan secara umum hubungan
input/output yang diinginkan. Algoritm menjelaskan prosedur komputasi khusus
untuk mencapai hubungan input/output tersebut. Misalnya, kita mungkin perlu
mengurutkan urutan angka ke dalam urutan yang tidak menurun. Masalah ini sering
muncul dalam praktik dan menyediakan lahan subur untuk memperkenalkan banyak
teknik desain standar dan alat analisis. Inilah cara kami mendefinisikan masalah
penyortiran secara formal:

Input: Barisan bilangan n (a1,a2,……an)

Output: Sebuah permutasi (penyusunan ulang) (a'1 ,a'2 ,…..a'n)dari barisan masukan
sedemikian rupa sehingga a'1 <= a' 2 <=….<=a'n. Misalnya, diberikan urutan input
h31; 41; 59; 26; 41; 58i, algoritma pengurutan kembali sebagai output urutan h26; 31;
41; 41; 58; 59i. Urutan input seperti itu disebut turunan dari masalah pengurutan.
Secara umum, sebuah contoh masalah terdiri dari input (memenuhi kendala apa pun
yang dikenakan dalam pernyataan masalah) yang diperlukan untuk menghitung solusi
untuk masalah tersebut. Urutan input seperti itu disebut turunan dari masalah
pengurutan. Secara umum, sebuah contoh masalah terdiri dari input (memenuhi
kendala apa pun yang dikenakan dalam pernyataan masalah) yang diperlukan untuk
menghitung solusi untuk masalah tersebut. Urutan input seperti itu disebut turunan
dari masalah pengurutan. Secara umum, sebuah contoh masalah terdiri dari input

Introduction to Programming
(memenuhi kendala apa pun yang dikenakan dalam pernyataan masalah) yang
diperlukan untuk menghitung solusi untuk masalah tersebut.…

B. Bahasa Pemrograman.

Komputer tidak mengerti bahasa manusia, sehingga program harus ditulis dalam bahasa
yang dapat digunakan komputer. Ada ratusan bahasa pemrograman, dan mereka
dikembangkan untuk membuat proses pemrograman lebih mudah bagi orang-orang.
Namun, semua program harus diubah menjadi instruksi yang dapat dijalankan oleh
komputer

a. Machine Language

Bahasa asli komputer, yang berbeda di antara berbagai jenis komputer, adalah
bahasa mesinnya satu set instruksi primitif bawaan. Instruksi ini dalam bentuk
kode biner, jadi jika Anda ingin memberikan komputer instruksi dalam bahasa
aslinya, Anda harus memasukkan instruksi sebagai kode biner. Misalnya, untuk
menambahkan dua angka, Anda mungkin harus menulis instruksi dalam kode
biner sebagai berikut:

1101101010011010

b. Assembly Language.

Pemrograman dalam bahasa mesin adalah proses yang membosankan. Selain itu,
program yang ditulis dalam bahasa mesin sangat sulit untuk dibaca dan
dimodifikasi. Untuk alasan ini, bahasa rakitan diciptakan pada hari-hari awal
komputasi sebagai alternatif bahasa mesin. Bahasa assembly menggunakan kata
deskriptif pendek, yang dikenal sebagai mnemonic, untuk mewakili setiap
instruksi bahasa mesin. Misalnya, mnemonic add biasanya berarti menambah
angka, dan sub berarti mengurangi angka. Untuk menjumlahkan angka 2 dan 3

Introduction to Programming
dan mendapatkan hasilnya, Anda dapat menulis instruksi dalam kode assembly
sebagai berikut: tambahkan 2, 3, hasil Bahasa assembly dikembangkan untuk
membuat pemrograman lebih mudah. Namun, karena komputer tidak dapat
menjalankan bahasa rakitan, program lain—disebut assembler—digunakan untuk
menerjemahkan program bahasa rakitan ke dalam kode mesin, seperti yang
ditunjukkan pada Gambar dibawah ini. Menulis kode dalam bahasa assembly
lebih mudah daripada dalam bahasa mesin. Namun, masih membosankan untuk
menulis kode dalam bahasa assembly. Sebuah instruksi dalam bahasa assembly
pada dasarnya sesuai dengan instruksi dalam kode mesin. Menulis dalam bahasa
rakitan mengharuskan Anda mengetahui cara kerja CPU. Bahasa rakitan disebut
sebagai bahasa tingkat rendah, karena bahasa rakitan bersifat dekat dengan bahasa
mesin dan bergantung pada mesin.

Gambar 1.1. Asembly Language

c. Bahasa tingkat tinggi.


Pada tahun 1950-an, generasi baru bahasa pemrograman yang dikenal sebagai
bahasa tingkat tinggi muncul. Mereka adalah platform independen,

1. …

Introduction to Programming
menjalankannya di berbagai jenis mesin. Bahasa tingkat tinggi mirip dengan
bahasa Inggris dan mudah dipelajari dan digunakan. Instruksi dalam bahasa
pemrograman tingkat tinggi disebut pernyataan. Di sini, misalnya, adalah
pernyataan bahasa tingkat tinggi yang menghitung luas lingkaran dengan jari-jari
5: luas = 5 * 5 * 3,14159; Ada banyak bahasa pemrograman tingkat tinggi, dan
masing-masing dirancang untuk tujuan tertentu. Tabel 1.1 mencantumkan
beberapayang populer.
Program yang ditulis dalam bahasa tingkat tinggi disebut program sumber atau
kode sumber. Karena komputer tidak dapat menjalankan program sumber,
program sumber harus diterjemahkan ke dalam kode mesin untuk dieksekusi.
Terjemahan dapat dilakukan menggunakan alat pemrograman lain yang disebut
juru bahasa atau kompiler

▪ Seorang interpreter membaca satu pernyataan dari kode sumber,


menerjemahkannya ke kode mesin atau kode mesin virtual, kemudian
langsung mengeksekusinya, seperti yang ditunjukkan pada Gambar 1.4a.
Perhatikan pernyataan dari kode sumber dapat diterjemahkan ke dalam
beberapa instruksi mesin.
▪ Kompilator menerjemahkan seluruh kode sumber ke dalam file kode
mesin, dan file kode mesin kemudian dieksekusi, seperti yang ditunjukkan
pada Gambar 1.4b.

Gambar 1.2. High level Language

Introduction to Programming
C. Pseudocode
Pseudocode adalah bahasa buatan dan informal yang membantu programmer
mengembangkan algoritma. Pseudocode adalah alat desain detail (algoritmik) "berbasis
teks".

Aturan Pseudocode cukup mudah. Semua pernyataan yang menunjukkan


"ketergantungan" harus diindentasi. Ini termasuk while, do, for, if, switch. Contoh di
bawah ini akan menggambarkan gagasan ini.
Contoh:

Jika nilai siswa lebih besar dari atau sama dengan 60

Cetak "lulus"
kalau tidak
Cetak "gagal".

Beberapa kata kunci sering digunakan untuk menunjukkan input, output, dan operasi
pemrosesan yang umum.

Input : READ, OBTAIN, GET.


Output: PRINT, DISPLAY, SHOW
Compute: COMPUTER, CALCULATE, DETERMINE.
Initialize: SET, INIT
Add one: INCREMENT, BUMP
D. FlowChart.
Flowchart adalah diagram yang menggambarkan proses, sistem, atau algoritma komputer.
Mereka banyak digunakan di berbagai bidang untuk mendokumentasikan, mempelajari,
merencanakan, meningkatkan, dan mengomunikasikan proses yang seringkali rumit
dalam diagram yang jelas dan mudah dipahami. Flowchart, kadang-kadang dieja sebagai
diagram alur, menggunakan persegi panjang, oval, berlian, dan banyak bentuk lain yang

Introduction to Programming
berpotensi untuk menentukan jenis langkah, bersama dengan menghubungkan panah
untuk menentukan aliran dan urutan.
Tabel 1.1 Simbol Flow Chart
Simbol Flowchart Nama Keterangan
Juga dikenal sebagai "Simbol
Tindakan," bentuk ini mewakili
proses, tindakan, atau fungsi. Ini
Simbol proses
adalah simbol yang paling
banyak digunakan dalam
diagram alur.

Juga dikenal sebagai "Simbol


Terminator," simbol ini mewakili
titik awal, titik akhir, dan hasil
Simbol Mulai/Akhir
potensial dari suatu jalur. Sering
berisi "Mulai" atau "Akhir"
dalam bentuk.

Merupakan input atau output


dari dokumen, secara khusus.
Contoh dan input adalah
menerima laporan, email, atau
Simbol dokumen
pesanan. Contoh output
menggunakan simbol dokumen
termasuk menghasilkan
presentasi, memo, atau surat.

Menunjukkan pertanyaan yang


harus dijawab — biasanya
ya/tidak atau benar/salah. Jalur
diagram alur kemudian dapat
Simbol keputusan
dipecah menjadi cabang yang
berbeda tergantung pada
jawaban atau konsekuensi
setelahnya.

Biasanya digunakan dalam


bagan yang lebih kompleks,
Simbol konektor simbol ini menghubungkan
elemen terpisah di satu
halaman.

Sering digunakan dalam bagan


Konektor Di Luar yang kompleks, simbol ini
menghubungkan elemen
Halaman/Simbol Tautan
terpisah di beberapa halaman
dengan nomor halaman yang

Introduction to Programming
biasanya ditempatkan pada
atau di dalam bentuk untuk
referensi yang mudah.

Juga disebut sebagai "Simbol


Data," bentuk ini mewakili data
yang tersedia untuk input atau
output serta mewakili sumber
daya yang digunakan atau
Simbol input/output dihasilkan. Sementara simbol
pita kertas juga mewakili
input/output, simbol itu sudah
usang dan tidak lagi umum
digunakan untuk diagram
diagram alur.

Ditempatkan bersama dengan


konteks, simbol ini
menambahkan penjelasan atau
komentar yang diperlukan
Simbol komentar/Catatan dalam rentang yang ditentukan.
Ini dapat dihubungkan dengan
garis putus-putus ke bagian
yang relevan dari diagram alur
juga.

E. NS Diagram

NS Diagram atau lebih dikenal dengan Nassi-Shneiderman Diagram atau juga biasa
disebut sebagai Structogram merupakan sebuah diagram yang menggambarkan /
mengekspresikan algoritma ke dalam suatu diagram terstruktur namun dalam satu
lingkup terbatas sehingga dibuat dalam satu kotak. NS Diagram sendiri ditujukan untuk
focus pengembangan dengan metode Top – Down Structured dimana system secara
umum dispesifikasikan terlebih dahulu kemudian dilanjutkan dengan menspesifikasi
detail proses didalamnya. Cara kerja ini merupakan cara kerja yang sama dengan
flowchart dan pseudocode.

Berikut merupakan bentuk dari NS Diagram.

Tabel 1.2 NS Diagram

Bentuk Struktur Keterangan

Introduction to Programming
Merupakan bentuk dari struktur IF Then –
Else pada NS Diagram dimana symbol ‘?’
menyatakan pertanyaan kondisi, kolom
‘T’ merupakan bagian dari statement
yang akan dilakukan jika kondisi
terpenuhi (benar), dan kolom ‘F’
merupakan bagian dari statement yang
akan dilakukan apabila kondisi tidak
terpnuhi.

Merupakan bentuk dari Do – While (sama


dengan bentuk While pada flowchart)
dimana do while condition merupakan
pertanyaan kondisi terpenuhi maka akan
dijalankan proses while

Merupakan bentuk dari Do – Until (Sama


dengan bentuk Repeat Until pada
flowchart) dimana dilakukan proses until
dulu lalu diikuti dengan pengecekan
kondisi, apabila kondisi masih terpenuhi
maka proses until akan Kembali
dijalankan

Contoh Penerapan NS Diagram pada system penggajian

Introduction to Programming
Gambar 1.3 Contoh NS Diagram

F. Spesifikasi Bahasa Java API,JDK, JRE dan IDE

Bahasa komputer memiliki aturan penggunaan yang ketat. Jika Anda tidak mengikuti
aturan saat menulis program, komputer tidak akan dapat memahaminya. Spesifikasi
bahasa Java dan Java API mendefinisikan standar Java.

Spesifikasi bahasa Java adalah definisi teknis dari sintaks dan semantik bahasa
pemrograman Java. Anda dapat menemukan spesifikasi lengkap bahasa Java di
docs.Oracle.com/javase/specs/.

Introduction to Programming
Antarmuka program aplikasi (API), juga dikenal sebagai perpustakaan, berisi kelas dan
antarmuka yang telah ditentukan untuk mengembangkan program Java. API masih
berkembang. Anda dapat melihat dokumentasi Java API terbaru di
https://docs.Oracle.com/en/java/javase/11/. Java adalah bahasa yang lengkap dan kuat
yang dapat digunakan dalam banyak cara. Itu datang dalam tiga edisi:

Java Standard Edition (Java SE) untuk mengembangkan aplikasi sisi klien. Aplikasi dapat
berjalan di desktop.

Java Enterprise Edition (Java EE) untuk mengembangkan aplikasi sisi server, seperti Java
servlet, JavaServer Pages (JSP), dan JavaServer Faces (JSF).

Java Micro Edition (Java ME) untuk mengembangkan aplikasi untuk perangkat seluler,
seperti ponsel

Java SE adalah fondasi yang menjadi dasar semua teknologi Java lainnya. Ada banyak
versi Java SE. Yang terbaru, ava SE 11 (atau hanya Java 11), digunakan dalam buku ini.
Oracle merilis setiap versi dengan Java Development Toolkit (JDK). Untuk Java 11, Java
Development Toolkit disebut JDK 11.

JDK terdiri dari satu set program terpisah, masing-masing dipanggil dari baris perintah,
untuk mengkompilasi, menjalankan, dan menguji program Java. Program untuk
menjalankan program Java dikenal sebagai Java Runtime Environment (JRE). Alih-alih
menggunakan JDK, Anda dapat menggunakan alat pengembangan Java (misalnya,
NetBeans, Eclipse, dan TextPad)—perangkat lunak yang menyediakan lingkungan
pengembangan terintegrasi (IDE) untuk mengembangkan program Java dengan cepat.
Pengeditan, kompilasi, pembuatan, debugging, dan bantuan online terintegrasi dalam satu
antarmuka pengguna grafis. Anda cukup memasukkan kode sumber di satu jendela atau
membuka file yang ada di jendela, lalu klik tombol atau item menu atau tekan tombol
fungsi untuk mengkompilasi dan menjalankan program.

Membuat, mengkompilasi, dan menjalankan program javaAnda harus membuat program


dan mengompilasinya sebelum dapat dieksekusi. Proses ini berulang, seperti yang

Introduction to Programming
ditunjukkan pada Gambar 1.6. Jika program Anda memiliki kesalahan kompilasi, Anda
harus memodifikasi program untuk memperbaikinya, lalu mengkompilasi ulang. Jika
program Anda memiliki kesalahan runtime atau tidak memberikan hasil yang benar,
Anda harus memodifikasi program, mengkompilasi ulang, dan menjalankannya lagi.
Anda dapat menggunakan editor teks atau IDE apa pun untuk membuat dan mengedit file
kode sumber Java. Bagian ini menunjukkan cara membuat, mengkompilasi, dan
menjalankan program Java dari jendela perintah. Bagian 1.11 dan 1.12 akan
memperkenalkan pengembangan program Java menggunakan NetBeans dan Eclipse.
Dari jendela perintah, Anda dapat menggunakan editor teks seperti Notepad untuk
membuat file kode sumber Java, seperti yang ditunjukkan pada Gambar
1.7

Gambar 1.4 Proses Compile

Introduction to Programming
Gambar 1.5 Contoh Code Welcome to java

G. Programming Style

• Gaya pemrograman berkaitan dengan tampilan program. Sebuah program dapat


dikompilasi dan dijalankan dengan baik bahkan jika ditulis hanya dalam satu baris, tetapi
menulis semuanya dalam satu baris akan menjadi gaya pemrograman yang buruk karena
akan sulit dibaca. Dokumentasi adalah kumpulan pernyataan dan komentar penjelasan
yang berkaitan dengan suatu program. Gaya pemrograman dan dokumentasi sama
pentingnya dengan pengkodean. Gaya pemrograman yang baik dan dokumentasi yang
sesuai mengurangi kemungkinan kesalahan dan membuat program mudah dibaca. Bagian
ini memberikan beberapa pedoman. Untuk panduan lebih rinci, lihat IC Tambahan,
Panduan Gaya Pengkodean Java, di Situs Web Pendamping
o Gaya komentar Dalam program yang panjang, Anda juga harus menyertakan
komentar yang memperkenalkan setiap langkah utama dan menjelaskan apa pun
yang sulit dibaca. Penting untuk membuat komentar singkat sehingga tidak
memadati program atau membuat sulit dibaca. Selain komentar baris (diawali
dengan //) dan komentar blok (diawali dengan /*), Java mendukung komentar
dengan tipe khusus, yang disebut sebagai komentar javadoc. komentar javadoc
dimulai dengan /** dan diakhiri dengan */. Mereka dapat diekstraksi menjadi file
HTML menggunakan perintah javadoc JDK. Untuk informasi lebih lanjut, lihat
Suplemen III.X, Komentar javadoc, di Situs Web Companion. Gunakan komentar
javadoc (/** . . . */) untuk mengomentari seluruh kelas atau seluruh metode.
Komentar ini harus mendahului kelas atau header metode agar dapat diekstraksi
menjadi file HTML javadoc.

Introduction to Programming
kelas publik Latihan1 {
/** Metode utama menampilkan tiga pesan */
public static void main(String[] args) {
// Gunakan statemen println untuk menampilkan tiga pesan
System.out.println("Pemrograman itu menyenangkan");
System.out.println("Selamat datang di Pemrograman Komputer");
System.out.println("Java adalah bahasa pemrograman");
}
}

o Block Style
Blok adalah sekelompok pernyataan yang dikelilingi oleh kurung kurawal. Ada
dua gaya populer, gaya baris berikutnya dan gaya akhir baris, seperti yang
ditunjukkan di bawah ini

Gambar 1.6 Block Style


Gaya baris berikutnya menyelaraskan kurung kurawal secara vertikal dan
membuat program mudah dibaca, sedangkan gaya akhir baris menghemat ruang
dan dapat membantu menghindari beberapa kesalahan pemrograman halus.
Keduanya adalah gaya blok yang dapat diterima. Pilihannya tergantung pada
preferensi pribadi atau organisasi. Anda harus menggunakan gaya blok secara
konsisten pencampuran gaya tidak dianjurkan. Buku ini menggunakan gaya akhir
baris agar konsisten dengan kode sumber Java API

H. Programming Error

o Kesalahan sintaks

Kesalahan yang dideteksi oleh compiler disebut kesalahan sintaks atau kesalahan
kompilasi. Kesalahan sintaks dihasilkan dari kesalahan dalam konstruksi kode,
seperti salah ketik kata kunci, menghilangkan beberapa tanda baca yang

Introduction to Programming
diperlukan, atau menggunakan tanda kurung buka tanpa tanda kurung tutup yang
sesuai. Kesalahan ini biasanya mudah dideteksi karena kompiler memberi tahu
Anda di mana kesalahan itu dan apa yang menyebabkannya

Empat kesalahan dilaporkan, tetapi program sebenarnya memiliki dua kesalahan:


Kata kunci void tidak ada sebelum main di baris 2.
String Welcome to Java harus ditutup dengan tanda kutip penutup pada baris 3.
Karena satu kesalahan akan sering menampilkan banyak baris kesalahan
kompilasi, itu adalah praktik yang baik untuk memperbaiki kesalahan dari baris
atas dan bekerja ke bawah. Memperbaiki kesalahan yang terjadi sebelumnya
dalam program juga dapat memperbaiki kesalahan tambahan yang terjadi
kemudian.

Gambar 1.7 Error


o Runtime ErrorRuntime
error adalah kesalahan yang menyebabkan program berhenti secara tidak normal.
Mereka terjadi saat program sedang berjalan jika lingkungan mendeteksi operasi
yang tidak mungkin dilakukan. Kesalahan input biasanya menyebabkan kesalahan
runtime. Kesalahan input terjadi ketika program menunggu pengguna
memasukkan nilai, tetapi pengguna memasukkan nilai yang tidak dapat ditangani
oleh program. Misalnya, jika program mengharapkan untuk membaca angka,

Introduction to Programming
tetapi pengguna memasukkan string, ini menyebabkan kesalahan tipe data terjadi
dalam program. Contoh lain dari kesalahan runtime adalah pembagian dengan
nol. Ini terjadi ketika pembagi adalah nol untuk pembagian bilangan bulat.

Gambar 1.8 Error Runtime


o Kesalahan Logika
Kesalahan logika terjadi ketika sebuah program tidak melakukan seperti yang
dimaksudkan. Kesalahan semacam ini terjadi karena berbagai alasan. Misalnya,
Anda menulis program di Daftar 1.6 untuk mengubah Celcius 35 derajat ke
derajat Fahrenheit:

Anda akan mendapatkan Fahrenheit 67 derajat, yang salah. Seharusnya 95.0. Di


Java, pembagian bilangan bulat adalah hasil bagi—bagian pecahan dipotong—
jadi di Java 9 / 5 adalah 1. Untuk mendapatkan hasil yang benar, Anda perlu
menggunakan 9.0 / 5, yang menghasilkan 1,8. Secara umum, kesalahan sintaks
mudah ditemukan dan mudah diperbaiki karena kompilator memberikan indikasi
dari mana kesalahan itu berasal dan mengapa kesalahan itu terjadi. Kesalahan
runtime juga tidak sulit ditemukan, karena alasan dan lokasi kesalahan
ditampilkan di konsol saat program dibatalkan. Menemukan kesalahan logika, di

Introduction to Programming
sisi lain, bisa sangat menantang. Dalam bab-bab selanjutnya, Anda akan
mempelajari teknik menelusuri program dan menemukan kesalahan logika.

Introduction to Programming
SIMPULAN

Algoritma merupakan suatu struktur tahapan penyelesaian masalah. Algoritma digunakan dalam
membantu mengolah permasalahan proses bisnis dari sistem yang akan dikembangkan maupun
penggambaran dari sistem yang sedang berjalan. Algoritma digunakan sebagai sarana
dokumentasi agar menjamin bahwa pemahaman yang dimiliki oleh pihak pengembang maupun
klien dalam alur yang sama dan benar serta membantu dalam mengarahkan pembuatan program.

Bahasa Pemrograman merupakan bahasa perantara antara manusia dan komputer yang
digunakan untuk tujuan pengembangan program. Bahasa pemrograman terbagi atas 2 cakupan
besar yakni, berbasis desktop maupun berbasis web. Pengaplikasian bahasa pemrograman
membutuhkan penyesuaian khusus dari komputer yang menerapkan dan juga masing – masing
bahasa pemrograman mempunyai struktur tersendiri dalam pembuatannya.

Bentuk penggambaran dari algoritma dapat diwujudkan ke dalam 3 bentuk umum, yakni
Flowchart, Pseudocode, dan NS Diagram. Ketiga – tiganya berperan dalam menggambarkan
algoritma ke dalam suatu struktur tertentu dan membantu pengembangan dengan metode Top –
Down Structured.

Bahasa Pemrograman Java merupakan bahasa pemrograman berbasiskan Object Oriented. Selain
itu Java adalah platform independent yang berarti bahwa sekali program ditulis dan dijalankan di
komputer mana saja. Nama File harus sesuai dengan nama public class yang ada di program Java
dan harus disimpan dengan ekstensi .java.

Introduction to Programming
DAFTAR PUSTAKA

1. http://www.cosc.canterbury.ac.nz/tim.bell/dt/Tutorial_Pseudocode.pdf
2. https://www.cs.umd.edu/hcil/members/bshneiderman/nsd/Yoder-Schrag-nassi_schart.pdf
3. https://en.wikipedia.org/wiki/Nassi%E2%80%93Shneiderman_diagram
4. https://id.wikipedia.org/wiki/Diagram_alir
5. Y. Daniel Liang. (2020). Introduction to Java programming and Data Structures :
comprehensive version. international edition. 12. Pearson Education. New Jersey. ISBN:
9780136520238. Chapter 1

Introduction to Programming
LECTURE NOTES

Introduction To Programming
Week ke - 2

Elementary Programming (data and


input/output)
LEARNING OUTCOMES

1. Peserta diharapkan dapat mengerti dasar dasar java programming dan konsep objek oriented

OUTLINE MATERI :

1. Membaca input dari console

2. Identifiers

3. Variable

4. Named Constant

5. Naming conventions

6. Numeric data

7. Reading numbers from the keyboard

8. Character data type and operations

9. The string types


ISI MATERI

• Membaca input dari console.

Java menggunakan System.out untuk merujuk ke perangkat output standar, dan System.in
ke perangkat input standar. Secara default, perangkat output adalah monitor tampilan, dan
perangkat input adalah keyboard. Untuk melakukan keluaran konsol, Anda cukup
menggunakan metode println untuk menampilkan nilai primitif atau string ke konsol.
Untuk melakukan input konsol, Anda perlu menggunakan kelas Scanner untuk membuat
objek untuk membaca input dari System.in, sebagai berikut: Scanner input = new
Scanner(System.in); Sintaks New Scanner(System.in) membuat objek dengan tipe
Scanner. Sintaks input Scanner menyatakan bahwa input adalah variabel yang bertipe
Scanner. Seluruh baris Scanner input = new Scanner(System.in) membuat objek Scanner
dan memberikan referensinya ke input variabel. Sebuah objek dapat memanggil
metodenya. Untuk memanggil metode pada suatu objek adalah meminta objek untuk
melakukan tugas. Anda dapat memanggil metode nextDouble() untuk membaca nilai
ganda sebagai berikut: radius ganda = input.nextDouble();Contoh :

Introduction To Programming
• Identifier

Identifier adalah nama-nama yang mengidentifikasi elemen-elemen seperti kelas, metode,


dan variabel dalam suatu program.
Semua pengenal harus mematuhi aturan berikut:
Pengidentifikasi adalah urutan karakter yang terdiri dari huruf, angka, garis bawah (_),
dan tanda dolar ($).
Pengidentifikasi harus dimulai dengan huruf, garis bawah (_), atau tanda dolar ($). Itu
tidak bisa dimulai dengan angka.
Pengidentifikasi tidak boleh berupa kata yang dicadangkan. Lihat Lampiran A untuk
daftar kata-kata yang dicadangkan. Kata-kata yang dicadangkan memiliki arti khusus
dalam bahasa Jawa. Kata kunci adalah kata-kata yang dicadangkan.
Pengidentifikasi dapat memiliki panjang berapa pun.
• Variabel
Variabel digunakan untuk menyimpan nilai yang akan digunakan nanti dalam suatu
program. Disebut variabel karena nilainya dapat diubah-ubah. Variabel digunakan untuk
merepresentasikan data dari tipe tertentu. Untuk menggunakan variabel, Anda
mendeklarasikannya dengan memberi tahu kompiler namanya serta jenis data apa yang
dapat disimpannya. Deklarasi variabel memberitahu compiler untuk mengalokasikan
ruang memori yang sesuai untuk variabel berdasarkan tipe datanya. Sintaks untuk
mendeklarasikan variabel adalah
namavariabel tipe data;

Berikut adalah beberapa contoh deklarasi variabel:

int count; // Deklarasikan count sebagai variabel integer

double radius; // Deklarasikan radius menjadi variabel double

Introduction To Programming
double interestRate; // Deklarasikan interestRate sebagai variabel double

Contoh-contoh ini menggunakan tipe data int dan double. Nanti Anda akan diperkenalkan
dengan tipe data tambahan, seperti byte, short, long, float, char, dan boolean.
Jika variabel bertipe sama, maka variabel tersebut dapat dideklarasikan bersama-sama,
sebagai berikut:
tipe data variabel1, variabel2, ..., variabeln;

Variabel dipisahkan dengan koma. Sebagai contoh,


int i, j, k; // Deklarasikan i, j, dan k sebagai variabel int
Variabel seringkali memiliki nilai awal. Anda dapat mendeklarasikan variabel dan
menginisialisasinya dalam satu langkah. Pertimbangkan, misalnya, kode berikut:
int jumlah = 1;
Ini setara dengan dua pernyataan berikut:
jumlah int;
menghitung = 1;
Anda juga dapat menggunakan formulir singkatan untuk mendeklarasikan dan
menginisialisasi variabel dengan tipe yang sama secara bersamaan. Sebagai contoh,
int i = 1, j = 2;Setiap variabel memiliki ruang lingkup.
Ruang lingkup variabel adalah bagian dari program di mana variabel dapat
direferensikan. Aturan yang mendefinisikan ruang lingkup variabel akan diperkenalkan
secara bertahap nanti dalam buku ini. Untuk saat ini, yang perlu Anda ketahui adalah
bahwa variabel harus dideklarasikan dan diinisialisasi sebelum dapat digunakan.
• Constant
bernama Constant bernama adalah pengidentifikasi yang mewakili nilai permanenNilai
variabel dapat berubah selama eksekusi program, tetapi konstanta bernama, atau hanya
konstanta, mewakili data permanen yang tidak pernah berubah. Sebuah konstanta juga
dikenal sebagai variabel akhir di Jawa. Dalam program ComputeArea kami, p adalah
konstanta. Jika Anda sering menggunakannya, Anda tidak ingin terus mengetik 3.14159;

Introduction To Programming
sebagai gantinya, Anda dapat mendeklarasikan konstanta untuk p. Berikut adalah sintaks
untuk mendeklarasikan konstanta:
tipe data akhir CONSTANTNAME = nilai;
Sebuah konstanta harus dideklarasikan dan diinisialisasi dalam pernyataan yang sama.
Kata final adalah kata kunci Java untuk mendeklarasikan konstanta. Secara konvensi,
semua huruf dalam konstanta menggunakan huruf besar. Misalnya, Anda dapat
mendeklarasikan p sebagai konstanta dan menulis ulang Daftar

Ada tiga manfaat menggunakan konstanta:


(1) Anda tidak perlu berulang kali mengetik nilai yang sama jika digunakan beberapa
kali;
(2) jika Anda harus mengubah nilai konstanta (misalnya, dari 3,14 menjadi 3,14159 untuk
PI), Anda hanya perlu mengubahnya di satu lokasi dalam kode sumber;
(3) nama deskriptif untuk konstanta membuat program mudah dibaca.
• Naming conventions
Pastikan Anda memilih nama deskriptif dengan arti langsung untuk variabel, konstanta,
kelas, dan metode dalam program Anda. Seperti disebutkan sebelumnya, nama peka huruf
besar-kecil. Tercantum di bawah ini adalah konvensi untuk penamaan variabel, metode,
dan kelas.
Gunakan huruf kecil untuk variabel dan metode—misalnya, variabel radius dan luas, dan
metode cetak. Jika sebuah nama terdiri dari beberapa kata, gabungkan menjadi satu, buat

Introduction To Programming
kata pertama menjadi huruf kecil dan huruf besar pada huruf pertama setiap kata
berikutnya—misalnya, variabel numberOfStudents. Gaya penamaan ini dikenal sebagai
camelCase karena karakter huruf besar pada namanya menyerupai punuk unta.
Kapitalkan huruf pertama dari setiap kata dalam nama kelas—misalnya, nama kelas
ComputeArea dan System.
Kapitalkan setiap huruf dalam konstanta, dan gunakan garis bawah di antara kata-kata—
misalnya, konstanta PI dan MAX_VALUE.
Penting untuk mengikuti konvensi penamaan untuk membuat program Anda mudah
dibaca.
• Numeric Data.
Setiap tipe data memiliki rentang nilai. Kompiler mengalokasikan ruang memori untuk
setiap variabel atau konstanta sesuai dengan tipe datanya. Java menyediakan delapan tipe
data primitif untuk nilai numerik, karakter, dan nilai Boolean. Bagian ini
memperkenalkan tipe data numerik dan operator.
Tipe Data Angka
Tabel 1.1 Numeric Data

Java menggunakan empat tipe integer: byte, short, int, dan long. Pilih jenis yang paling
sesuai untuk variabel Anda. Misalnya, jika Anda tahu bahwa integer yang disimpan
dalam variabel berada dalam kisaran byte, nyatakan variabel sebagai byte.
Java menggunakan dua jenis angka floating-point: float dan double. Tipe ganda dua kali
lebih besar dari float, sehingga ganda dikenal sebagai presisi ganda, dan float sebagai

Introduction To Programming
presisi tunggal. Biasanya, Anda harus menggunakan tipe ganda karena lebih akurat
daripada tipe float.
• Membaca Angka dari Keyboard
Anda tahu cara menggunakan metode nextDouble() di kelas Scanner untuk membaca nilai
ganda dari keyboard. Anda juga dapat menggunakan metode yang tercantum dalam Tabel
untuk membaca sejumlah tipe byte, short, int, long, dan float.
Tabel 1.2 Method Angka dari keyboard.

• Tipe data karakter dan operasi


Tipe data karakter, char, digunakan untuk mewakili satu karakter. Literal karakter diapit
oleh tanda petik tunggal. Perhatikan kode berikut:
karakter huruf = 'A'; char numChar = '4'Pernyataan pertama memberikan karakter A ke
huruf variabel char. Pernyataan kedua memberikan karakter digit 4 ke variabel char
numChar.
• Tipe string
Tipe char hanya mewakili satu karakter. Untuk mewakili string karakter, gunakan tipe
data yang disebut String. Sebagai contoh, kode berikut mendeklarasikan pesan sebagai
string dengan nilai “Welcome to Java”.
String pesan = "Selamat datang di Jawa"; String adalah kelas yang telah ditentukan di
perpustakaan Java, sama seperti kelas Sistem dan Pemindai. Tipe String bukan tipe
primitif. Ini dikenal sebagai tipe referensi. Setiap kelas Java dapat digunakan sebagai tipe
referensi untuk variabel. Variabel yang dideklarasikan oleh tipe referensi dikenal sebagai
variabel referensi yang mereferensikan suatu objek. Di sini, pesan adalah variabel
referensi yang mereferensikan objek string dengan konten Welcome to Java.

Introduction To Programming
Tabel 1.3 Method String

Introduction To Programming
SIMPULAN

Semua nama disebut dengan Identifier yang memiliki ketentuan yang harus dipenuhi diantaranya
adalah tidak diperbolehkan diawali dengan angka. Java mengenal Case Sensitive yang artinya
huruf besar dan huruf kecil akan dianggap berbeda. Perbedaan dari variabel dan konstanta adalah
nilai variabel dapat diubah sedangkan konstanta tidak dapat diubah.

Setiap variabel maupun konstanta memiliki memiliki tipe data sesuai dengan kebutuhannya. Tipe
data numerik terdiri atas 4 tipe untuk integer dan 2 tipe untuk floating point. Tipe integer yaitu
byte, short, int, long. Floating point yaitu float dan double. Setiap tipe data mempunyai rentang
nilai masing - masing. Tipe data lainnya adalah char yang memuat satu karakter, sedangkan jika
membutuhkan lebih dari satu karakter dapat menggunakan tipe data String. Tipe data terakhir
adalah boolean yang hanya memuat nilai true atau false.

Tipe data String merupakan composite class yang dimana nilainya terdiri dari penggabungan
nilai sekumpulan variabel char (array of char) disamping itu kelas String juga memiliki fungsi –
fungsi pada kelasnya.

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 2

Introduction To Programming
LECTURE NOTES

Introduction to Programming
Week ke - 3

Elementary Programming(Operators)
LEARNING OUTCOMES

1. Peserta diharapkan dapat mengerti dasar dasar java programming dan konsep objek oriented

OUTLINE MATERI :

1. Numeric Operators

2. Expression and operator precedence

3. Augmented assignment operators

4. Increment and decrement operators

5. Numeric type conversion

6. Math operators

7. Logical operators

8. Bitrwise operators

9. Operator precedence and associativity


ISI MATERI
A. Numeric Operators

Operator untuk tipe data numerik termasuk operator aritmatika standar: penambahan (+),
pengurangan (–), perkalian (*), pembagian (/), dan sisa (%), seperti yang tercantum pada
Tabel dibawah ini Operand adalah nilai yang dioperasikan oleh operator.

Tabel 1.1 Numeric Operators

B. Expression and operator precedence

Menulis ekspresi numerik di Java melibatkan terjemahan langsung dari ekspresi


aritmatika menggunakan operator Java. Misalnya, ekspresi aritmatika

dapat diterjemahkan ke dalam ekspresi Java sebagai berikut:

Meskipun Java memiliki caranya sendiri untuk mengevaluasi ekspresi di belakang layar,
hasil ekspresi Java dan ekspresi aritmatika yang sesuai adalah sama. Oleh karena itu,
Anda dapat dengan aman menerapkan aturan aritmatika untuk mengevaluasi ekspresi
Java. Operator yang terdapat dalam pasangan tanda kurung dievaluasi terlebih dahulu.
Tanda kurung dapat disarangkan, dalam hal ini ekspresi dalam tanda kurung dalam
dievaluasi terlebih dahulu. Ketika lebih dari satu operator digunakan dalam ekspresi,
aturan prioritas operator berikut digunakan untuk menentukan urutan evaluasi:

Introduction to Programming
Operator perkalian, pembagian, dan sisa diterapkan terlebih dahulu. Jika suatu ekspresi
berisi beberapa operator perkalian, pembagian, dan sisa, mereka diterapkan dari kiri ke
kanan.
Operator penjumlahan dan pengurangan diterapkan terakhir. Jika ekspresi berisi beberapa
operator penambahan dan pengurangan, mereka diterapkan dari kiri ke kanan.
Berikut adalah contoh bagaimana ekspresi dievaluasi:

Gambar 1.1 Expression and Operator Precendence

C. Augmented assignment operators


Sangat sering, nilai variabel saat ini digunakan, dimodifikasi, kemudian dipindahkan kembali ke
variabel yang sama. Misalnya, pernyataan berikut meningkatkan jumlah variabel sebesar 1:
hitung = hitung + 1;
Java memungkinkan Anda untuk menggabungkan operator penugasan dan penambahan
menggunakan operator penugasan augmented (atau gabungan). Misalnya, pernyataan
sebelumnya dapat ditulis sebagai count += 1;
+= disebut augmented assignment operators

Tabel 1.2 Augmented Assignment Operators

D. Increment and decrement operators


++ dan -- adalah dua operator singkatan untuk menambah dan mengurangi variabel
dengan 1. Ini berguna karena sering kali nilai perlu diubah dalam banyak tugas
pemrograman. Misalnya, kode berikut menambah i dengan 1 dan mengurangi j dengan 1.

Introduction to Programming
int i = 3, j = 3;
I++; // I menjadi 4
J--; // j menjadi 2
i++ diucapkan sebagai "i plus plus" dan i—— sebagai "i minus minus." Operator ini
dikenal sebagai postfix increment (atau postincrement) dan postfix decrement (atau
postdecrement), karena operator ++ dan —— ditempatkan setelah variabel. Operator ini
juga dapat ditempatkan sebelum variabel. Sebagai contoh,

int i = 3, j = 3;

++I; // I menjadi 4

--J; // j menjadi 2

++i menambah i dengan 1 dan --j mengurangi j dengan 1. Operator ini dikenal sebagai
prefix increment (atau preincrement) dan prefix decrement (atau predecrement). Seperti
yang Anda lihat, efek dari i++ dan ++i atau i-- dan --i adalah sama pada contoh
sebelumnya. Namun, efeknya berbeda ketika digunakan dalam pernyataan yang
melakukan lebih dari sekadar penambahan dan pengurangan

Tabel 1.3 increment and decrement operators

E. Numeric type Conversion

Bisakah Anda melakukan operasi biner dengan dua operan dari jenis yang berbeda? Ya.
Jika bilangan bulat dan bilangan floating-point terlibat dalam operasi biner, Java secara
otomatis mengubah bilangan bulat menjadi nilai floating-point.

Oleh karena itu, 3 * 4,5 sama dengan 3,0 * 4,5.


Anda selalu dapat menetapkan nilai ke variabel numerik yang tipenya mendukung

Introduction to Programming
rentang nilai yang lebih besar; jadi, misalnya, Anda dapat menetapkan nilai panjang ke
variabel float. Namun, Anda tidak dapat menetapkan nilai ke variabel tipe dengan rentang
yang lebih kecil kecuali jika Anda menggunakan casting tipe. Casting adalah operasi
yang mengubah nilai dari satu tipe data menjadi nilai dari tipe data lain. Casting tipe
dengan rentang kecil ke tipe dengan rentang yang lebih besar dikenal sebagai tipe
pelebaran. Casting tipe dengan rentang besar ke tipe dengan rentang yang lebih kecil
dikenal sebagai penyempitan tipe. Java akan secara otomatis memperluas tipe, tetapi
Anda harus mempersempit tipe secara eksplisit. Sintaks untuk casting suatu tipe adalah
untuk menentukan tipe target dalam tanda kurung, diikuti dengan nama variabel atau nilai
yang akan dilemparkan. Sebagai contoh, pernyataan berikut System.out.println((int)1.7);
menampilkan 1. Ketika nilai ganda dimasukkan ke dalam nilai int, bagian pecahan akan
terpotong. Pernyataan berikut

System.out.println((double)1 / 2); menampilkan 0,5, karena 1 dilemparkan ke 1,0 terlebih


dahulu, kemudian 1,0 dibagi 2. Namun, pernyataan System.out.println(1 / 2);
menampilkan 0, karena 1 dan 2 keduanya bilangan bulat dan nilai yang dihasilkan juga
harus bilangan bulat.

F. Operator Matematika
Metode Eksponen
Ada lima metode yang terkait dengan eksponen di kelas Matematika

Tabel 1.4 method eksponen

Metode Pembulatan
Kelas Matematika berisi empat metode pembulatan

Introduction to Programming
Tabel 1.5 Metode Pembulatan

Metode min, max, dan abs


Metode min dan max mengembalikan jumlah minimum dan maksimum dari dua angka
(int, long, float, atau double). Misalnya, max(4.4, 5.0) mengembalikan 5.0, dan min(3, 2)
mengembalikan 2. Metode abs mengembalikan nilai absolut dari angka (int, long, float,
atau double). Sebagai contoh,
Math.max(2, 3) mengembalikan 3
Math.min(2.5, 4.6) mengembalikan 2.5
Math.max(Math.max(2.5, 4.6), Math.min(3, 5.6)) mengembalikan 4,6
Math.abs(−2) mengembalikan 2
Math.abs(−2.1) mengembalikan 2.1
Metode random
Anda menggunakan metode random() di bab sebelumnya. Metode ini menghasilkan nilai
ganda acak lebih besar dari atau sama dengan 0,0 dan kurang dari 1,0 (0 <=
Math.random() < 1,0). Anda dapat menggunakannya untuk menulis ekspresi sederhana
untuk menghasilkan angka acak dalam rentang apa pun. Sebagai contoh,
(int)(math.random() * 10); -> Kembalikan bilangan bulat acak antara 0 dan 9
(50 + int)(math.random() * 50); -> kembalikan bilangan bulat acak antara 50 dan 99

G. Logic Operator.

Operator logika, juga dikenal sebagai operator Boolean, beroperasi pada nilai Boolean
untuk membuat nilai Boolean baru. Tabel di bawah ini mencantumkan operator Boolean.

Introduction to Programming
Tabel 1.6 Logic Operator

Tabel di bawah mendefinisikan operator not (!), yang meniadakan true ke false dan false
ke true.
Tabel 1.5 Operator not !

Tabel di bawah mendefinisikan operator and (&&). Dan (&&) dari dua operan Boolean
benar jika dan hanya jika kedua operan itu benar.
Tabel 1.6 Operator And

Tabel di bawah mendefinisikan operator or (||). Or (||) dari dua operan Boolean bernilai
benar jika setidaknya salah satu operan bernilai benar.
Tabel 1.7 Operator OR

Introduction to Programming
Tabel di bawah mendefinisikan operator eksklusif atau (^). Eksklusif atau (^) dari dua
operan Boolean adalah benar jika dan hanya jika kedua operan tersebut memiliki nilai
Boolean yang berbeda. Catatan p1 ^ p2 sama dengan p1 != p2

Tabel 1.5 Operator Eksklusif

H. Bitwise Operator

Untuk menulis program pada tingkat mesin, seringkali Anda perlu menangani bilangan
biner secara langsung dan melakukan operasi pada tingkat bit. Java menyediakan
operator bitwise dan operator shift yang didefinisikan dalam Tabel G.1. Operator bit
hanya berlaku untuk tipe integer (byte, short, int, dan long). Karakter yang terlibat dalam
operasi bit diubah menjadi integer. Semua operator bitwise dapat membentuk operator
penugasan bitwise, seperti ^=, |=, <<=, >>=, dan >>>=.

Introduction to Programming
Tabel 1.6 Operator Bitwise

• Operator precedence and associativity

Misalkan Anda memiliki ekspresi ini:


3 + 4 * 4 > 5 * (4 + 3) – 1 && (4 – 3 > 5)
Apa nilainya? Apa perintah eksekusi dari operator? Ekspresi dalam tanda kurung
dievaluasi terlebih dahulu. (Kurung dapat bersarang, dalam hal ini ekspresi di dalam
kurung dalam dieksekusi terlebih dahulu.) Saat mengevaluasi ekspresi tanpa tanda
kurung, operator diterapkan sesuai dengan aturan prioritas dan aturan asosiatif. Aturan
prioritas mendefinisikan prioritas untuk operator, seperti yang ditunjukkan pada Tabel di
bawah ini, yang berisi operator yang telah Anda pelajari sejauh ini. Operator terdaftar
dalam urutan prioritas yang menurun dari atas ke bawah. Operator logika memiliki
prioritas lebih rendah daripada operator relasional, dan operator relasional memiliki

Introduction to Programming
prioritas lebih rendah daripada operator aritmatika. Operator dengan prioritas yang sama
muncul di grup yang sama.
Tabel 1.5 Operator Precedence

Introduction to Programming
SIMPULAN

Operator assignment digunakan untuk memberikan nilai kepada variable yang disebelah
kanannya. Untuk pengerjaan increment dan decrement harus diperhatikan apakah post atau pre.
Apabila berdiri sendiri maka post dan pre akan memiliki hasil yang sama. Namun apabila
digabungkan dengan statement lainnya maka akan menghasilkan nilai yang berbeda.

Operator logical untuk menggabungkan dua kondisi , dan hasil dari operasi ini adalah true atau
false. Operator bitwise akan menggunakan bilangan biner dalam operasinya. Operator relational
atau yang biasa juga disebut dengan operator comparsion berfungsi untuk membandingkan dua
buah variable.

Java menyediakan method yang tergabung dalam math class untuk memudahkan pengguna
apabila ingin menggunakan trigonometri, exponent maupun service method yang didalamnya
juga ada fungsi random. Dalam mengerjakan operasi – operasi diatas, maka harus juga
diperhatikan urutan pengerjaannya sesuai dengan derajat kepentingnnya yang digambarkan
dalam table precedence dan associativity.

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 2

Introduction to Programming
LECTURE NOTES

Introduction to Programming
Week ke - 4

Selection
LEARNING OUTCOMES

1. Peserta diharapkan mengerti dasar dasar pemrograman java dan konsep objek orientasi

OUTLINE MATERI :

1. Boolean data type, value and expression

2. If statement

3. Two ways if – else statement

4. Nester if and multiway if else statements

5. Switch statement

6. Conditional operators
ISI MATERI

A. Boolean data type, value and expression

Bagaimana Anda membandingkan dua nilai, seperti apakah radius lebih besar dari 0,
sama dengan 0, atau kurang dari 0? Java menyediakan enam operator relasional (juga
dikenal sebagai operator perbandingan), ditunjukkan pada Tabel di bawah, yang dapat
digunakan untuk membandingkan dua nilai (asumsikan radius 5 dalam tabel)

Tabel 1.1 Expression

Hasil perbandingan adalah nilai Boolean: benar atau salah. Misalnya, pernyataan berikut
menampilkan true: radius ganda = 1; System.out.println(radius > 0); Sebuah variabel
yang memegang nilai Boolean dikenal sebagai variabel Boolean. Tipe data boolean
digunakan untuk mendeklarasikan variabel Boolean. Variabel boolean dapat menampung
salah satu dari dua nilai: benar atau salah. Misalnya, pernyataan berikut menetapkan true
ke variabel lightsOn: boolean lightsOn = true; benar dan salah adalah literal, seperti
angka seperti 10. Mereka bukan kata kunci, tetapi kata-kata yang dicadangkan dan tidak
dapat digunakan sebagai pengidentifikasi dalam program.

B. If Statement.

Java memiliki beberapa jenis pernyataan seleksi: pernyataan if-else satu arah, pernyataan
if-else dua arah, pernyataan if-else bersarang, pernyataan if-else multi-arah, Paryatan

Introduction to Programming
switch, dan operator kondisional. Pernyataan if satu arah mengeksekusi suatu tindakan
jika dan hanya jika kondisinya benar. Sintaks untuk pernyataan if satu arah adalah
sebagai berikut:

if (ekspresi boolean) {

Statement;

Flowchart di bawah ini mengilustrasikan bagaimana Java mengeksekusi sintaks dari


pernyataan if. Flowchart adalah diagram yang menggambarkan algoritma atau proses,
menunjukkan langkah-langkah sebagai kotak dari berbagai jenis, dan urutannya dengan
menghubungkannya dengan panah. Operasi proses diwakili dalam kotak-kotak ini, dan
panah yang menghubungkannya mewakili aliran kontrol. Kotak berlian menunjukkan
kondisi Boolean, dan kotak persegi panjang mewakili pernyataan.

Gambar 1.1 if Statement Flowchart

Introduction to Programming
C. Two ways if – else statement

if statement satu arah melakukan tindakan jika kondisi yang ditentukan benar. Jika
kondisinya salah, tidak ada yang dilakukan. Tetapi bagaimana jika Anda ingin
mengambil tindakan alternatif ketika kondisinya salah? Anda dapat menggunakan
pernyataan if-else dua arah. Tindakan yang ditentukan oleh pernyataan if-else dua arah
berbeda berdasarkan apakah kondisinya benar atau salah. Berikut adalah sintaks untuk
pernyataan if-else dua arah:

if (ekspresi boolean) {

Statements for the true case;

else if {

Statements for the false case-;

Diagram alur dari pernyataan tersebut ditunjukkan di bawah ini:

Gambar 1.2 Two ways If -Else Statement Flow chart

Introduction to Programming
D. Nested if and multiway if else statement

Pernyataan dalam pernyataan if atau if-else dapat berupa pernyataan Java yang legal,
termasuk pernyataan if atau if-else lainnya. Pernyataan if bagian dalam dikatakan
bersarang di dalam pernyataan if bagian luar. Pernyataan if bagian dalam dapat berisi
pernyataan if yang lain; sebenarnya, tidak ada batasan kedalaman sarang. Misalnya,
berikut ini adalah pernyataan if bersarang:

if (i > k) {

if (j > k)

System.out.println("i and j are greater than k");

else

System.out.println("i is less than or equal to k");

Pernyataan if (j > k) bersarang di dalam pernyataan if (i > k). Pernyataan if bersarang


dapat digunakan untuk mengimplementasikan beberapa alternatif.

Gambar 1.3 Nested if and multiway if else statement

Introduction to Programming
Gambar 1.4 Nested if and multiway if else statement Flowchart

E. Switch statements.

Switch statements mengeksekusi pernyataan berdasarkan nilai variabel atau ekspresi.


Java menyediakan pernyataan switch untuk menyederhanakan coding
switch (status) {

case 0: compute tax for single filers;

break;

case 1: compute tax for married jointly or qualifying widow(er);

break;

case 2: compute tax for married filing separately;

Introduction to Programming
break;

case 3: compute tax for head of household;

break;

default: System.out.println("Error: invalid status");

System.exit(1);
}

Flowchart dari pernyataan switch sebelumnya ditunjukkan pada Gambar di bawah ini:

Gambar 1.5 Switch statement Flowchart

F. Conditional operators

Anda mungkin ingin menetapkan nilai ke variabel yang dibatasi oleh kondisi tertentu.
Misalnya, pernyataan berikut memberikan 1 ke y jika x lebih besar dari 0 dan 1 ke y jika
x kurang dari atau sama dengan 0:

if (x > 0)

y = 1;

else

y = −1;

Introduction to Programming
Atau, seperti dalam contoh berikut, Anda dapat menggunakan operator kondisional untuk
mencapai hasil yang sama.

y = (x > 0)? 1: −1;

Simbol? dan: muncul bersama disebut operator kondisional (juga dikenal sebagai
operator ternary karena menggunakan tiga operan. Ini adalah satu-satunya operator
ternary di Jawa. Operator kondisional memiliki gaya yang sama sekali berbeda, tanpa
pernyataan if yang eksplisit. The sintaks untuk menggunakan operator adalah sebagai
berikut:

ekspresi boolean? ekspresi1: ekspresi2

Hasil dari ekspresi ini adalah ekspresi1 jika ekspresi boolean benar; jika tidak, hasilnya
adalah ekspresi2.

Misalkan Anda ingin menetapkan jumlah yang lebih besar dari variabel num1 dan num2
ke max. Anda cukup menulis pernyataan menggunakan operator kondisional:

max = (num1 > num2)? num1: num2;

Introduction to Programming
SIMPULAN

Operasi – operasi seleksi pada pemrograman Java dimungkinkan dengan adanya Struktur
Kendala Pemilihan

Operasi – operasi seleksi tersebut pada umumnya dapat dibagi menjadi beberapa opeasiumum,
yakni IF Statement, IF – ELSE Statement, Nested IF Statement, dan Switch – Case Statement.
Perbedaan yang mencolok tampak dari operasi dengan IF dan Switch – Case dimana pada
operasi seleksi dengan IF memungkinkan adanya operasi logika yang berupa perbandingan,
persamaan, dsb. Sedangkan, pada operasi seleksi dengan Switch – Case hanya memungkinkan
operasi seleksi dengan bentuk persamaan meskipun yang dibandingkan terhadap banyak nilai.

Pada saat penulisan Struktur kendali pemilihan khususnya IF – ELSE harus diperhatikan dengan
baik agar tidak terjadi kesalahan yang sering dilakukan oleh programmer.

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 3

Introduction to Programming
LECTURE NOTES

Introduction to Programming
Week ke - 5

Repetition and Jump Operation


LEARNING OUTCOMES

1. Peserta diharapkan mengerti Dasar dasar pemrograman java dan konsep orientasi objek

OUTLINE MATERI :

1. The while loop

2. The do while loop

3. The for loop

4. Nested loops

5. Which loops to use

6. Keyword break and continue


ISI MATERI

A. The while loops.

Sintaks untuk perulangan while adalah sebagai berikut:

while (loop-continuation-condition) {

// Loop body

Statement(s);

Gambar a menunjukkan diagram alir loop while. Bagian dari perulangan yang berisi
pernyataan-pernyataan yang akan diulang disebut badan perulangan. Eksekusi satu kali
dari tubuh loop disebut sebagai iterasi (atau pengulangan) dari loop. Setiap loop berisi
loop-continuation-condition, ekspresi Boolean yang mengontrol eksekusi body. Itu
dievaluasi setiap kali untuk menentukan apakah badan loop dieksekusi. Jika evaluasinya
benar, badan loop dieksekusi; jika evaluasinya salah, seluruh loop berakhir, dan kontrol
program beralih ke pernyataan yang mengikuti loop while. Loop untuk menampilkan
Welcome to Java! seratus kali diperkenalkan di bagian sebelumnya adalah contoh dari
while loop. Flowchartnya ditunjukkan pada Gambar b.

Introduction to Programming
Gambar 1.1 Flowchart while Loops

Kondisi loop-continuation-count <100 dan badan loop berisi dua pernyataan dalam kode
berikut:

Gambar 1.2 contoh coding While Loops

Dalam contoh ini, Anda tahu persis berapa kali loop body perlu dieksekusi karena jumlah
variabel kontrol digunakan untuk menghitung jumlah iterasi. Jenis loop ini dikenal
sebagai loop counter-controlled.

Introduction to Programming
B. The do while loop.

Perulangan do while adalah variasi dari perulangan while. Sintaksnya adalah sebagai
berikut:
do {

// Loop body;

Statement(s);

} while (loop-continuation-condition);

Flowchart eksekusinya ditunjukkan pada Gambar a.

loop body dieksekusi terlebih dahulu, kemudian loop-continuation-condition dievaluasi.


Jika evaluasi benar, loop body dieksekusi lagi; jika salah, perulangan do-while berakhir.
Misalnya, pernyataan while loop berikut:

int count = 0;
while (count < 100) {
System.out.println("Welcome to Java!");
count++;
}
dapat ditulis menggunakan perulangan do-while sebagai berikut:
int count = 0;
do {
System.out.println("Welcome to Java!");
count++;
} while (count < 100);

Flowchart dari perulangan do-while ini ditunjukkan pada Gambar b. Perbedaan antara
while loop dan do-while loop adalah urutan evaluasi kondisi loopcontinuation, dan badan

Introduction to Programming
loop dieksekusi. Dalam kasus perulangan dowhile, badan perulangan dieksekusi
setidaknya sekali. Anda dapat menulis perulangan menggunakan perulangan while atau
perulangan do-while. Terkadang yang satu adalah pilihan yang lebih nyaman daripada
yang lain.

Gambar 1.3 Flowchart the Do while Loops

C. The for loop.

Seringkali Anda menulis loop dalam bentuk umum berikut:


i = nilai awal; // Inisialisasi variabel kontrol loop
while (i < nilai akhir) {
// Lingkaran tubuh
...
saya++; // Sesuaikan variabel kontrol loop
}
Loop ini intuitif dan mudah dipahami oleh pemula. Namun, pemrogram sering lupa untuk
menyesuaikan variabel kontrol, yang mengarah ke loop tak terbatas. Perulangan for dapat
digunakan untuk menghindari kesalahan potensial dan menyederhanakan perulangan

Introduction to Programming
sebelumnya seperti yang ditunjukkan pada (a) di bawah ini. Secara umum, sintaks untuk
perulangan for adalah seperti yang ditunjukkan pada (a), yang ekuivalen dengan (b).

Gambar 1.4 Converting dari For dan While


Secara umum, sintaks dari for loop adalah sebagai berikut:

for (initial-action; loop-continuation-condition; action-after-each-iteration)


{
// Loop body;
Statement(s);
}
Flowchart dari for loop ditunjukkan pada Gambar a.
Pernyataan for loop dimulai dengan kata kunci for, diikuti oleh sepasang tanda kurung
yang mengapit struktur kontrol loop. Struktur ini terdiri dari tindakan awal, kondisi
lanjutan loop, dan tindakan setelah setiap iterasi. Struktur kontrol diikuti oleh badan loop
yang tertutup di dalam kawat gigi. Tindakan awal, kondisi lanjutan loop, dan tindakan
setelah setiap iterasi dipisahkan oleh titik koma. A for loop umumnya menggunakan
variabel untuk mengontrol berapa kali badan loop dieksekusi dan kapan loop berakhir.
Variabel ini disebut sebagai variabel kontrol. Tindakan awal sering menginisialisasi
variabel kontrol, tindakan-setelah-setiap-iterasi biasanya menambah atau mengurangi
variabel kontrol, dan kondisi-kelanjutan-loop menguji apakah variabel kontrol telah
mencapai nilai terminasi. Sebagai contoh, berikut untuk cetakan loop Selamat datang di
Java! seratus kali:
int i;
for (i = 0; i < 100; i++) {

Introduction to Programming
System.out.println("Welcome to Java!");
}
Flowchart dari pernyataan tersebut ditunjukkan pada Gambar b. Perulangan for
menginisialisasi i ke 0, kemudian berulang kali mengeksekusi pernyataan println dan
mengevaluasi i++ saat i kurang dari 100.
Tindakan awal, i = 0, menginisialisasi variabel kontrol, i. Loopcontinuation-condition, i <
100, adalah ekspresi Boolean. Ekspresi dievaluasi tepat setelah inisialisasi dan di awal
setiap iterasi. Jika kondisi ini benar, badan perulangan akan dieksekusi. Jika salah, loop
berakhir, dan kontrol program beralih ke baris yang mengikuti loop. Tindakan-setelah-
setiap-iterasi, i++, adalah pernyataan yang menyesuaikan variabel kontrol. Pernyataan ini
dijalankan setelah setiap iterasi dan menambah variabel kontrol. Akhirnya, nilai dari
variabel kontrol harus memaksa kondisi-kelanjutan-loop menjadi salah; jika tidak, loop
tidak terbatas. Variabel kontrol loop dapat dideklarasikan dan diinisialisasi dalam loop
for. Berikut ini contohnya:

for (int i = 0; i < 100; i++) {


System.out.println("Welcome to Java!");
}

D. Nested loops

Nested loops terdiri dari loop luar dan satu atau lebih loop dalam. Setiap kali loop luar
diulang, loop dalam dimasukkan kembali, dan dimulai lagi
Contoh

Introduction to Programming
Program menampilkan judul (baris 5) pada baris pertama dalam output. Untuk loop
pertama (baris 9 dan 10) menampilkan angka 1–9 pada baris kedua. Garis putus-putus (–)
ditampilkan pada baris ketiga (baris 12). Loop berikutnya (baris 15–22) adalah loop for
bersarang dengan variabel kontrol i di loop luar dan j di loop dalam. Untuk setiap i, hasil
kali i * j ditampilkan pada garis di loop dalam, dengan j adalah 1, 2, 3, …, 9.

Introduction to Programming
E. Which loops to use.

Anda dapat menggunakan perulangan for, perulangan while, atau perulangan do-while,
mana saja yang sesuai.

Perulangan while dan perulangan do while lebih mudah dipelajari daripada perulangan
for. Namun, Anda akan mempelajari perulangan for dengan cepat setelah beberapa
latihan. A for loop menempatkan inisialisasi variabel kontrol, kondisi kelanjutan loop,
dan penyesuaian setelah setiap iterasi secara bersamaan. Ini lebih ringkas dan
memungkinkan Anda untuk menulis kode dengan lebih sedikit kesalahan daripada dua
loop lainnya. Perulangan while dan perulangan for disebut perulangan pretest karena
kondisi lanjutan diperiksa sebelum badan perulangan dieksekusi. Perulangan do-while
disebut perulangan posttest karena kondisinya diperiksa setelah badan perulangan
dieksekusi. Tiga bentuk pernyataan loop— while, do-while, dan for—secara ekspresif
setara; yaitu, Anda dapat menulis loop dalam salah satu dari tiga bentuk ini. Misalnya,
perulangan while pada (a) pada gambar berikut selalu dapat diubah menjadi perulangan
for pada (b)

Gambar 1.5 Equivalent While and For

Perulangan for pada (a) pada gambar berikut secara umum dapat diubah menjadi
perulangan while pada (b) kecuali dalam kasus khusus tertentu

Gambar 1.6 Equivalent For and While

Introduction to Programming
Gunakan pernyataan loop yang paling intuitif dan nyaman untuk Anda. Secara umum, for
loop dapat digunakan jika jumlah pengulangan diketahui sebelumnya, seperti, misalnya,
ketika Anda perlu menampilkan pesan seratus kali. Perulangan while dapat digunakan
jika jumlah pengulangan tidak tetap, seperti dalam kasus pembacaan angka sampai
inputnya 0. Perulangan do-while dapat digunakan untuk menggantikan perulangan while
jika badan perulangan harus dieksekusi sebelum kondisi lanjutan diuji.

F. Keyword break and continue

Anda telah menggunakan kata kunci break dalam pernyataan switch. Anda juga dapat
menggunakan break in a loop untuk segera menghentikan loop.

Anda juga dapat menggunakan kata kunci continue dalam satu lingkaran. Ketika ditemui,
itu mengakhiri iterasi saat ini dan kontrol program pergi ke akhir badan loop. Dengan kata
lain, continue break dari sebuah iterasi, sedangkan kata kunci break keluar dari sebuah
loop. Di bawah ini menyajikan program untuk mendemonstrasikan efek penggunaan
continue dalam satu lingkaran.

Introduction to Programming
Introduction to Programming
SIMPULAN

Operasi – operasi perulangan sendiri terbagi menjadi tiga bagian, yakni operasidenganWhile, Do
– While, dan For. Pada operasi while dan for memiliki kencederungan yang sama dimana
pengecekan kondisi dilakukan di awal perulangan. Sedangkan, padaoperasi perulangan dengan
Do – While pengecekan kondisi akan dilakukan di akhirperulangan. Selain itu, operasi
perulangan yang mendukung penuh fitur Jump Operation pada Java hanya operasi perulangan
dengan For. Hal ini dikarenakan operasi perulangan dengan for dibagi menjadi 4 fase dalam
struktur perulangannya.

Struktur pengulangan for memiliki proses incremental sendiri, berbeda dengan while dan do –
while yang harus mendefinisikan proses incremental didalam body loop.

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 5

Introduction to Programming
LECTURE NOTES

Introduction to Programming
Week ke – 6

Exception Handling
LEARNING OUTCOMES

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

OUTLINE MATERI :

1. Exception Type

2. Declaring Throwing and catching

3. The finally clause

4. Rethrowing exception
ISI MATERI

A. Exception type

Exception adalah objek, dan objek didefinisikan menggunakan kelas. Kelas root untuk
Exception adalah java.lang.Throwable. Bagian sebelumnya menggunakan kelas
ArithmeticException dan InputMismatchException. Apakah ada jenis Exception lain
yang dapat Anda gunakan? Bisakah Anda mendefinisikan kelas Exception Anda sendiri?
Ya. Ada banyak kelas Exception yang telah ditentukan sebelumnya di Java API. Gambar
12.1 menunjukkan beberapa di antaranya, Anda akan belajar bagaimana mendefinisikan
kelas Exception Anda sendiri.

Gambar 1.1 Kelas Exception

Kelas Throwable adalah akar dari kelas Exception. Semua kelas Exception Java mewarisi
secara langsung atau tidak langsung dari Throwable. Anda dapat membuat kelas
Exception Anda sendiri dengan memperluas Exception atau subkelas Exception. Kelas
Exception dapat diklasifikasikan menjadi tiga jenis utama: kesalahan sistem, Exception,
dan Exception runtime.

Introduction to Programming
• System Error dilempar oleh JVM dan direpresentasikan dalam kelas Kesalahan.
Kelas Kesalahan menjelaskan kesalahan sistem internal, meskipun kesalahan
seperti itu jarang terjadi. Jika ada, hanya sedikit yang dapat Anda lakukan selain
memberi tahu pengguna dan mencoba menghentikan program dengan anggun.
Contoh subclass Error tercantum dalam Tabel di bawah ini.

Tabel 1.1 Subclass Error

• Exception diwakili dalam kelas Exception, yang menjelaskan kesalahan yang


disebabkan oleh program Anda dan oleh keadaan eksternal. Kesalahan ini dapat
ditangkap dan ditangani oleh program Anda. Contoh subkelas Exception
tercantum dalam Tabel di bawah ini

Tabel 1.2 Exception Class

• Runtime Exception direpresentasikan dalam kelas RuntimeException, yang


menjelaskan kesalahan pemrograman, seperti casting yang buruk, mengakses larik
di luar batas, dan kesalahan numerik. Pengecualian runtime biasanya
menunjukkan kesalahan pemrograman. Contoh subclass tercantum dalam Tabel di
bawah ini.

Introduction to Programming
Tabel 1.3 Runtime Exception

RuntimeException, Error, dan subkelasnya dikenal sebagai pengecualian yang


tidak dicentang. Semua pengecualian lain dikenal sebagai pengecualian yang
diperiksa, artinya kompiler memaksa programmer untuk memeriksa dan
menanganinya dalam blok try-catch atau mendeklarasikannya di header metode.
Mendeklarasikan pengecualian di header metode akan dibahas di Bagian
berikutnya.
Dalam kebanyakan kasus, pengecualian yang tidak dicentang mencerminkan
kesalahan logika pemrograman yang tidak dapat dipulihkan. Misalnya,
NullPointerException dilempar jika Anda mengakses objek melalui variabel
referensi sebelum objek ditetapkan padanya; sebuah IndexOutOfBoundsException
dilempar jika Anda mengakses elemen dalam larik di luar batas larik. Ini adalah
kesalahan logika yang harus diperbaiki dalam program. Pengecualian yang tidak
dicentang dapat terjadi di mana saja dalam suatu program. Untuk menghindari
penggunaan blok try-catch yang berlebihan, Java tidak mewajibkan Anda menulis
kode untuk menangkap atau mendeklarasikan pengecualian yang tidak dicentang

B. Declaring Throwing and catching

Handler untuk exception ditemukan dengan menyebarkan exception ke belakang melalui


rantai pemanggilan metode, mulai dari metode saat ini. Bagian sebelumnya memberi
Anda gambaran umum tentang penanganan pengecualian dan memperkenalkan beberapa
jenis pengecualian yang telah ditentukan sebelumnya. Bagian ini memberikan diskusi
mendalam tentang penanganan pengecualian. Model penanganan exception Java

Introduction to Programming
didasarkan pada tiga operasi: mendeklarasikan exception, melempar exception, dan
menangkap exception, seperti yang ditunjukkan di bawah ini

Gambar 1.2 Throw and catch exception

a. Mendeklarasikan exception

Di Java, pernyataan yang saat ini sedang dieksekusi milik suatu metode.
Interpreter Java memanggil metode utama untuk mulai menjalankan program.
Setiap metode harus menyatakan jenis pengecualian yang dicentang yang
mungkin dilontarkannya. Ini dikenal sebagai mendeklarasikan pengecualian.
Karena kesalahan sistem dan kesalahan waktu proses dapat terjadi pada kode apa
pun, Java tidak mengharuskan Anda mendeklarasikan Kesalahan dan
RuntimeException (pengecualian yang tidak dicentang) secara eksplisit dalam
metode. Namun, semua pengecualian lain yang dilontarkan oleh metode harus
dideklarasikan secara eksplisit di header metode sehingga pemanggil metode
diberitahu tentang pengecualian tersebut. Untuk mendeklarasikan pengecualian
dalam suatu metode, gunakan kata kunci throws di header metode, seperti dalam
contoh ini:

public void myMethod() throws IOException

Kata kunci throws menunjukkan myMethod mungkin melempar IOException.


Jika metode mungkin melempar beberapa pengecualian, tambahkan daftar

Introduction to Programming
pengecualian, dipisahkan dengan koma, setelah melempar:
public void myMethod()

throws Exception1, Exception2, ..., ExceptionN

b. Throwing exception

Program yang mendeteksi kesalahan dapat membuat turunan dari jenis Exception
yang sesuai dan membuangnya. Ini dikenal sebagai melempar pengecualian.
Berikut ini contohnya: Misalkan program mendeteksi bahwa argumen yang
diteruskan ke metode melanggar kontrak metode (misalnya, argumen harus
nonnegatif, tetapi argumen negatif diteruskan); program dapat membuat instance
IllegalArgumentException dan membuangnya, sebagai berikut:

IllegalArgumentException ex = new IllegalArgumentException("Wrong


Argument");
throw ex;

c. Catching exceptions

Anda sekarang tahu cara mendeklarasikan Exception dan cara melempar


exception. Ketika exception dilempar, itu bisa ditangkap dan ditangani di blok
Try-Catch, sebagai berikut:

try {
statements; // Statements that may throw exceptions
}

Introduction to Programming
catch (Exception1 exVar1) {
handler for exception1;
} catch (Exception2 exVar2) {
handler for exception2;
}
...
catch (ExceptionN exVarN) {
handler for exceptionN;
}
Jika tidak ada Exception yang muncul selama eksekusi blok try, blok catch akan
dilewati.

Jika salah satu statement di dalam blok try mengeluarkan exception, Java
melewatkan statement yang tersisa di blok try dan memulai proses menemukan
kode untuk menangani pengecualian. Kode yang menangani Exception disebut
handle exception; itu ditemukan dengan menyebarkan exception ke belakang
melalui rantai pemanggilan metode, mulai dari metode saat ini. Setiap blok catch
diperiksa secara bergiliran, dari pertama hingga terakhir, untuk melihat apakah
jenis objek Exception adalah turunan dari kelas exception di blok catch. Jika
demikian, objek exception ditugaskan ke variabel yang dideklarasikan dan kode
di blok catch dieksekusi. Jika tidak ada handler yang ditemukan, Java keluar dari
metode ini, meneruskan Exception ke pemanggil metode, dan melanjutkan proses
yang sama untuk menemukan handler. Jika tidak ada handler yang ditemukan
dalam rantai metode yang dipanggil, program berakhir dan mencetak pesan
kesalahan pada konsol. Proses menemukan penangan disebut Catching exception.
Misalkan metode utama memanggil metode1, metode1 memanggil metode2,
metode2 memanggil metode3, dan metode3 melempar pengecualian, seperti yang
ditunjukkan pada Gambar 12.3. Pertimbangkan skenario berikut:

Introduction to Programming
i. Jika tipe Exception adalah Exception3, maka akan ditangkap oleh blok
catch untuk menangani Exception ex3 dalam metode2. pernyataan5
dilewati dan pernyataan6 dieksekusi.

ii. Jika tipe exception adalah Exception2, metode2 dibatalkan, kontrol


dikembalikan ke metode1, dan exception ditangkap oleh blok catch untuk
menangani exception ex2 di metode1. pernyataan3 dilewati dan
pernyataan4 dieksekusi.

iii. Jika tipe exception adalah Exception1, metode1 dibatalkan, kontrol


dikembalikan ke metode utama, dan exception ditangkap oleh blok catch
untuk menangani exception ex1 dalam metode utama. pernyataan1
dilewati dan pernyataan2 dieksekusi.

iv. Jika tipe exception tidak tercakup dalam metode2, metode1, atau utama,
program berakhir dan pernyataan1 dan pernyataan2 tidak dieksekusi.

Gambar 1.3 Exception call Stack

Introduction to Programming
C. The finally clause

Finally Clause selalu dieksekusi terlepas dari apakah Exception terjadi atau tidak.
Kadang-kadang, Anda mungkin ingin beberapa kode dieksekusi terlepas dari apakah
Exception terjadi atau di catch. Java memiliki klausa last yang dapat digunakan untuk
mencapai tujuan ini. Sintaks untuk Finally clause mungkin terlihat seperti ini:
try {
statements;
}
catch (TheException ex) {
handling ex;
} finally {
finalStatements;
}
Kode di finally block dieksekusi dalam semua keadaan, terlepas dari apakah exception
terjadi di blok coba atau ditangkap. Pertimbangkan tiga kemungkinan kasus:
1. Jika tidak ada exception yang muncul di blok try, Finalstatement dieksekusi dan
pernyataan berikutnya setelah pernyataan try dieksekusi.
2. Jika sebuah pernyataan menyebabkan Exception di blok try yang ditangkap di blok
catch, sisa pernyataan di blok try dilewati, blok catch dieksekusi, dan Finally clause
dieksekusi. Pernyataan berikutnya setelah pernyataan try dieksekusi.
3. Jika salah satu pernyataan menyebabkan Exception yang tidak tertangkap di blok
catch mana pun, pernyataan lain di blok try dilewati, Finally clause dieksekusi, dan
exception diteruskan ke pemanggil metode ini. Kode dalam Finally clause sering kali
untuk menutup file dan untuk membersihkan sumber daya. Finally block dijalankan
bahkan jika ada pernyataan kembali sebelum mencapai Finally block.

Introduction to Programming
D. Rethrowing exception

Java mengizinkan Exception handler untuk menampilkan kembali exception jika handler
tidak dapat memproses exception, atau hanya ingin membiarkan caller diberi tahu tentang
Exception tersebut. Sintaks untuk menampilkan Rethrow exception mungkin terlihat
seperti ini:

try {

statements;

} catch (TheException ex) { perform operations before exits

throw ex;

Pernyataan throw ex memunculkan kembali Exception ke pemanggil sehingga penangan


lain di pemanggil mendapatkan kesempatan untuk memproses exception ex

Introduction to Programming
SIMPULAN

Pada pemrograman pada umumnya telah mendukung operasi – operasi Exception Handling.

Exception Handling merupakan operasi yang sangat penting dan wajib diterapkan dalam
pengembangan aplikasi yang berperan untuk menangkap dan menangani error yang terjadi
selama program dijalankan. Pada penerapannya dibutuhkan beberapa klausa sebagai struktur
utamanya, yakni try, catch, dan finally.

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 12

Introduction to Programming
LECTURE NOTES

Introduction to Programming
Week ke - 7

Methods
LEARNING OUTCOMES

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

OUTLINE MATERI :

1. Defining Method

2. Calling a Method

3. Passing argument by value

4. Overloading method

5. The Scope Variable


ISI MATERI
A. Defining method

Define method terdiri dari nama method, parameter, tipe nilai kembalian, dan isi. Sintaks
untuk Define method adalah sebagai berikut:

modifier returnValueType methodName(list of parameters) {

// Method body;

Mari kita lihat method yang didefinisikan untuk menemukan yang lebih besar antara dua
bilangan bulat. Method ini, bernama max, memiliki dua parameter int, num1 dan num2,
yang lebih besar dikembalikan oleh method. Gambar di bawah mengilustrasikan
komponen dari method ini

Method header menentukan modifier, return value type, nama method, dan parameter
method.
Sebuah method dapat mengembalikan nilai. returnValueType adalah tipe data dari nilai
yang dikembalikan oleh method. Beberapa method melakukan operasi yang diinginkan
tanpa mengembalikan nilai. Dalam hal ini, returnValueType adalah kata kunci void.
Misalnya, returnValueType tidak berlaku dalam method utama, serta di System.exit, dan
System.out.println. Jika suatu method mengembalikan nilai, itu disebut method return

Introduction to Programming
value; jika tidak, itu disebut void method. Variabel yang didefinisikan dalam header
method dikenal sebagai parameter formal atau parameter sederhana. Parameter seperti
placeholder: ketika suatu method dipanggil, Anda memberikan nilai ke parameter. Nilai
ini disebut sebagai parameter atau argumen aktual. Daftar parameter mengacu pada jenis
method, urutan, dan jumlah parameter. Nama method dan daftar parameter bersama-sama
membentuk tanda tangan method. Parameter adalah opsional; yaitu, suatu method
mungkin tidak mengandung parameter. Misalnya, method Math.random() tidak memiliki
parameter. Badan method berisi kumpulan pernyataan yang mengimplementasikan
method. Badan method dari method max menggunakan pernyataan if untuk menentukan
bilangan mana yang lebih besar dan mengembalikan nilai bilangan tersebut. Agar method
pengembalian nilai mengembalikan hasil, pernyataan pengembalian menggunakan kata
kunci return diperlukan. Method berakhir ketika pernyataan kembali dieksekusi. Agar
method pengembalian nilai mengembalikan hasil, pernyataan pengembalian
menggunakan kata kunci return diperlukan. Method berakhir ketika pernyataan kembali
dieksekusi. Agar method pengembalian nilai mengembalikan hasil, pernyataan
pengembalian menggunakan kata kunci return diperlukan. Method berakhir ketika
pernyataan kembali dieksekusi.

Calling a method

Dalam definisi metode, Anda menentukan apa yang harus dilakukan metode. Untuk
menjalankan metode, Anda harus memanggil atau invoke. Program yang memanggil
fungsi disebut pemanggil. Ada dua cara untuk memanggil sebuah metode, tergantung
pada apakah metode tersebut mengembalikan nilai atau tidak. Jika metode
mengembalikan nilai, panggilan ke metode biasanya diperlakukan sebagai nilai. Sebagai
contoh,
int larger = max(3, 4);

calls max(3, 4) dan memberikan hasil metode ke variabel yang lebih besar. Contoh lain
dari panggilan yang diperlakukan sebagai nilai adalah

Introduction to Programming
System.out.println(max(3, 4));

Jika suatu metode mengembalikan void, panggilan ke metode tersebut harus berupa
pernyataan. Misalnya, metode println mengembalikan void. Panggilan berikut adalah
pernyataan:
System.out.println("Selamat datang di Java!")

Program ini berisi metode main dan metode max. Metode main sama seperti metode
lainnya, kecuali metode ini dipanggil oleh JVM untuk memulai program.

Introduction to Programming
Header metode main selalu sama. Seperti yang ada di contoh ini, ini termasuk pengubah
public dan static, tipe nilai kembalian void, nama metode utama, dan parameter tipe
String[].
Pernyataan di main dapat memanggil metode lain yang didefinisikan di kelas yang berisi
metode main atau di kelas lain. Dalam contoh ini, metode main memanggil max(i, j),
yang didefinisikan dalam kelas yang sama dengan metode main.
Ketika metode max dipanggil (baris 6), nilai variabel i 5 diteruskan ke num1 dan nilai
variabel j 2 diteruskan ke num2 di metode max. Aliran kontrol ditransfer ke metode max
dan metode max dieksekusi. Ketika pernyataan kembali dalam metode max dieksekusi,
metode max mengembalikan kontrol ke pemanggilnya (dalam hal ini, pemanggil adalah
metode main). Proses ini diilustrasikan pada Gambar di bawah ini.

B. Passing argument by value

Kekuatan metode adalah kemampuannya untuk bekerja dengan parameter. Anda dapat
menggunakan println untuk mencetak string apa pun, dan max untuk menemukan
maksimum dua nilai int. Saat memanggil metode, Anda perlu memberikan argumen,
yang harus diberikan dalam urutan yang sama dengan parameter masing-masing dalam
tanda tangan metode. Ini dikenal sebagai asosiasi urutan parameter. Misalnya, metode
berikut mencetak pesan n berkali kali:

public static void nPrintln(String message, int n) {


for (int i = 0; i < n; i++)

Introduction to Programming
System.out.println(message);
}
Anda dapat menggunakan nPrintln("Halo", 3) untuk mencetak Halo tiga kali. Pernyataan
nPrintln("Hello", 3) meneruskan parameter string aktual Hello ke pesan parameter,
meneruskan 3 ke n, dan mencetak Hello tiga kali. Namun, pernyataan nPrintln(3, "Halo")
akan salah. Tipe data 3 tidak cocok dengan tipe data untuk parameter pertama, pesan, dan
argumen kedua, Halo, tidak cocok dengan parameter kedua, n.

Saat Anda memanggil metode dengan argumen, nilai argumen diteruskan ke parameter.
Ini disebut sebagai nilai lewat. Jika argumennya adalah variabel daripada nilai literal,
nilai variabel diteruskan ke parameter. Variabel tidak terpengaruh, terlepas dari
perubahan yang dibuat pada parameter di dalam metode. Seperti yang diberikan dalam
Daftar di bawah ini, nilai x (1) diteruskan ke parameter n untuk memanggil metode
kenaikan (baris 5). Parameter n bertambah 1 dalam metode (baris 10), tetapi x tidak
diubah apa pun yang dilakukan metode tersebut.

Introduction to Programming
C. Overloading method

Metode max yang digunakan sebelumnya hanya berfungsi dengan tipe data int. Tetapi
bagaimana jika Anda perlu menentukan mana dari dua angka floating-point yang
memiliki nilai maksimum? Solusinya adalah membuat metode lain dengan nama yang
sama tetapi parameternya berbeda, seperti yang ditunjukkan pada kode berikut:

public static double max(double num1, double num2) {

if (num1 > num2)

return num1;

else

return num2;

Jika Anda memanggil max dengan parameter int, metode max yang mengharapkan
parameter int akan dipanggil; dan jika Anda memanggil max dengan parameter double,
metode max yang mengharapkan parameter double akan dipanggil. Ini disebut sebagai
metode overloading; yaitu, dua metode memiliki nama yang sama tetapi daftar parameter
yang berbeda dalam satu kelas. Kompiler Java menentukan metode mana yang akan
digunakan berdasarkan tanda tangan metode
Daftar di bawah ini adalah program yang menciptakan tiga metode. Yang pertama
menemukan bilangan bulat maksimum, yang kedua menemukan ganda maksimum, dan
yang ketiga menemukan maksimum di antara tiga nilai ganda. Ketiga metode tersebut
diberi nama max

Introduction to Programming
D. The scope variable

Variabel yang didefinisikan di dalam metode disebut sebagai variabel lokal. Ruang
lingkup variabel lokal dimulai dari deklarasinya dan berlanjut hingga akhir blok yang
berisi variabel tersebut. Variabel lokal harus dideklarasikan dan diberi nilai sebelum
dapat digunakan. Parameter sebenarnya adalah variabel lokal. Cakupan parameter metode
mencakup keseluruhan metode. Variabel yang dideklarasikan di bagian tindakan awal
dari header for-loop memiliki cakupannya di seluruh loop. Namun, variabel yang

Introduction to Programming
dideklarasikan di dalam for-loop body memiliki ruang lingkup yang terbatas di loop body
dari deklarasi hingga akhir blok yang berisi variabel, seperti yang ditunjukkan pada
Gambar di bawah.

Anda dapat mendeklarasikan variabel lokal dengan nama yang sama di blok yang
berbeda dalam suatu metode, tetapi Anda tidak dapat mendeklarasikan variabel lokal dua
kali di blok yang sama atau di blok bersarang, seperti yang ditunjukkan pada Gambar di
bawah

Introduction to Programming
SIMPULAN

Pada pemrograman lebih lanjut perlu mempelajari tentang efisiensi dalam pembuatan program
dalam hal ini dapat dicapai dengan menggunakan method. Method yang merupakan kumpulan
baris proses membantu mengurangi penggunaan kode yang sama berkali-kali dan juga
membantu dalam pembentukan struktur program yang lebih rapi.

Pendefinisian method dengan nama yang sama dimungkinkan dan hal ini dikenal dengan nama
overloading method. Adapun yang harus menjadi perhatian adalah method signature yang harus
berbeda diantara method dengan nama sama tersebut.

Selain method yang juga harus diperhatikan adalah scope dari variabel. Dimana scope variabel
akan dimulai dari saat dideklarasikan sampai dengan di akhir blok tersebut.

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 6

Introduction to Programming
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
LECTURE NOTES

Introduction to Programming
Week ke - 9

Sorting
LEARNING OUTCOMES

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

OUTLINE MATERI :

1. Insertion Sort

2. Bubble Sort

3. Merge Sort

4. Quick Sort
ISI MATERI

A. Insertion Sort

Gambar dibawah menunjukkan bagaimana mengurutkan daftar {2, 9, 5, 4, 8, 1, 6}


menggunakan insertion sort. Untuk demo interaktif tentang cara kerja pengurutan
penyisipan, buka visualgo.net

Algoritma tersebut dapat digambarkan sebagai berikut:

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

insert list[i] into a sorted sublist list[0..i−1] so that

list[0..i] is sorted.

Untuk memasukkan list[i] ke dalam list[0..i−1], simpan list[i] ke dalam variabel


sementara, misalnya currentElement. Pindahkan list[i−1] ke list[i] if list[i−1] >
currentElement, pindahkan list[i−2] ke list[i−1] if list[i−2] > currentElement, dan
seterusnya, sampai list[i−k] <= currentElement atau k > i (kami melewati elemen pertama
dari daftar yang diurutkan). Tetapkan currentElement ke daftar[i−k+1]. Misalnya, untuk
memasukkan 4 ke {2, 5, 9} pada Langkah 4 pada Gambar 23.2, pindahkan daftar[2] (9)
ke daftar[3] karena 9 > 4 dan pindahkan daftar[1] (5) ke daftar[ 2] sejak 5 > 4. Terakhir,
pindahkan currentElement (4) ke daftar[1].

Introduction to Programming
Introduction to Programming
Metode insertionSort(int[] list) mengurutkan array elemen int. Metode ini
diimplementasikan dengan loop for bersarang. Loop luar (dengan variabel kontrol loop i)
(baris 4) diulang untuk mendapatkan sublist terurut, yang berkisar dari list[0] hingga
list[i]. Loop dalam (dengan variabel kontrol loop k) menyisipkan list[i] ke dalam sublist
dari list[0] hingga list[i−1].
Untuk lebih memahami metode ini, lacak dengan pernyataan berikut:
int[] list = {1, 9, 4, 6, 5, −4};
InsertionSort.insertionSort(list);
Algoritma Insertion Sort yang disajikan di sini mengurutkan daftar elemen dengan
berulang kali memasukkan elemen baru ke dalam array parsial yang diurutkan hingga
seluruh array diurutkan. Pada iterasi ke-k, untuk sort elemen ke dalam array berukuran k,
mungkin diperlukan k perbandingan untuk menemukan posisi sort dan k bergerak untuk
sort elemen. Misalkan T(n) menyatakan kompleksitas untuk jenis sort, dan c menyatakan
jumlah total operasi lain seperti penugasan dan perbandingan tambahan dalam setiap
iterasi. Jadi

Oleh karena itu, kompleksitas dari algoritma insertion-sort adalah O(n2 ). Oleh karena itu,
jenis seleksi dan penyisipan memiliki kompleksitas waktu yang sama

B. Bubble Sort
Algoritma bubble-sort membuat beberapa lintasan melalui array. Pada setiap lintasan,
pasangan tetangga yang berurutan dibandingkan. Jika pasangan dalam urutan menurun,
nilainya ditukar; jika tidak, nilainya tetap tidak berubah. Teknik ini disebut bubble sort
atau sinking sort karena nilai yang lebih kecil secara bertahap "menggelembung" ke atas
dan nilai yang lebih besar tenggelam ke bawah. Setelah pass pertama, elemen terakhir
menjadi yang terbesar dalam array. Setelah lintasan kedua, elemen kedua hingga terakhir

Introduction to Programming
menjadi yang terbesar kedua dalam larik. Proses ini dilanjutkan sampai semua elemen
diurutkan. Gambar 23.3a menunjukkan lintasan pertama dari bubble sort pada larik enam
elemen (2 9 5 4 8 1). Bandingkan elemen pada pasangan pertama (2 dan 9) dan tidak
diperlukan swap karena sudah berurutan. Bandingkan elemen pada pasangan kedua (9
dan 5) dan tukar 9 dengan 5 karena 9 lebih besar dari 5. Bandingkan elemen pada
pasangan ketiga (9 dan 4) dan tukar 9 dengan 4. Bandingkan elemen pada pasangan
keempat ( 9 dan 8) dan tukar 9 dengan 8. Bandingkan elemen pada pasangan kelima (9
dan 1) dan tukar 9 dengan 1. Pasangan yang dibandingkan disorot dan angka yang sudah
diurutkan dicetak miring pada Gambar 23.3. Untuk demo interaktif tentang cara kerja
bubble sort, kunjungi visualgo.com

Pass pertama menempatkan angka terbesar (9) sebagai yang terakhir dalam array. Pada
lintasan kedua, seperti yang ditunjukkan pada Gambar b, Anda membandingkan dan
mengurutkan pasangan elemen secara berurutan. Tidak perlu mempertimbangkan
pasangan terakhir karena elemen terakhir dalam array sudah menjadi yang terbesar. Pada
lintasan ketiga, seperti yang ditunjukkan pada Gambar c, Anda membandingkan dan
mengurutkan pasangan elemen secara berurutan kecuali dua elemen terakhir karena
keduanya sudah berurutan. Jadi, pada lintasan ke-k, Anda tidak perlu mempertimbangkan
elemen k - 1 terakhir karena sudah dipesan. Algoritma untuk semacam gelembung
dijelaskan dalam Daftar di bawah ini

Introduction to Programming
Perhatikan jika tidak ada pertukaran yang terjadi dalam suatu lintasan, maka lintasan
berikutnya tidak perlu dilakukan karena semua elemen sudah diurutkan.

Algoritma Bubble sort yang ditingkatkan

Contoh

Introduction to Programming
Dalam kasus terbaik, algoritma Bubble Sort hanya membutuhkan lintasan pertama untuk
menemukan bahwa array sudah diurutkan—tidak diperlukan lintasan berikutnya. Karena
jumlah perbandingan adalah n - 1 pada lintasan pertama, waktu kasus terbaik untuk
bubble sort adalah O(n). Dalam kasus terburuk, algoritma bubble-sort membutuhkan n - 1
lintasan. Lintasan pertama membuat n - 1 perbandingan, lintasan kedua membuat n - 2
perbandingan, dan seterusnya; pass terakhir membuat 1 perbandingan. Jadi, jumlah total
perbandingan adalah sebagai berikut:

Oleh karena itu, waktu terburuk untuk bubble sort adalah O(n2 )

C. Merge Sort

Gambar di atas mengilustrasikan jenis gabungan dari larik delapan elemen (2 9 5 4 8 1 6


7). Array asli dibagi menjadi (2 9 5 4) dan (8 1 6 7). Terapkan pengurutan gabungan pada
dua subarray ini secara rekursif untuk membagi (2 9 5 4) menjadi (2 9) dan (5 4) dan (8 1
6 7) menjadi (8 1) dan (6 7). Proses ini berlanjut hingga subarray hanya berisi satu
elemen. Misalnya, array (2 9) dipecah menjadi subarray (2) dan (9). Karena array (2)
berisi satu elemen, itu tidak dapat dipecah lebih lanjut. Sekarang gabungkan (2) dengan
(9) ke dalam larik terurut baru (2 9) dan (5) dengan (4) ke dalam larik terurut baru (4 5).
Gabungkan (2 9) dengan (4 5) ke dalam larik terurut baru (2 4 5 9) dan terakhir

Introduction to Programming
gabungkan (2 4 5 9) dengan (1 6 7 8) ke dalam larik terurut baru (1 2 4 5 6 7 8 9).

D. Quick Sort

Quick Sort berfungsi sebagai berikut: Algoritme memilih elemen, yang disebut pivot,
dalam array. Ini membagi array menjadi dua bagian sehingga semua elemen di bagian
pertama kurang dari atau sama dengan pivot, dan semua elemen di bagian kedua lebih
besar dari pivot. Algoritma quick-sort kemudian diterapkan secara rekursif ke bagian
pertama dan kemudian bagian kedua. Algoritma Quick Sort, yang dikembangkan oleh
CAR Hoare pada tahun 1962, dijelaskan dalam Daftar di bawah ini:

Introduction to Programming
Setiap partisi menempatkan pivot di tempat yang tepat. Ini membagi daftar menjadi dua
sublist seperti yang ditunjukkan pada gambar berikut.

Pemilihan pivot mempengaruhi kinerja algoritma. Idealnya, algoritme harus memilih


pivot yang membagi dua bagian secara merata. Untuk kesederhanaan, asumsikan bahwa
elemen pertama dalam array dipilih sebagai pivot. (Latihan Pemrograman 23.4
mengusulkan strategi alternatif untuk memilih pivot.) Gambar a mengilustrasikan
bagaimana mengurutkan array (5 2 9 3 8 4 0 1 6 7) menggunakan quick sort. Pilih elemen
pertama, 5, sebagai pivot. Array dipartisi menjadi dua bagian, seperti yang ditunjukkan
pada Gambar b. Pivot yang disorot ditempatkan di tempat yang tepat dalam larik.
Terapkan quick sort pada dua subarray (4 2 1 3 0) lalu (8 9 6 7). Partisi pivot 4 (4 2 1 3 0)
menjadi hanya satu subarray (0 2 1 3), seperti yang ditunjukkan pada Gambar c. Terapkan
pengurutan cepat aktif (0 2 1 3). Pivot 0 mempartisinya menjadi hanya satu subarray (2 1
3), seperti yang ditunjukkan pada Gambar d. Terapkan sortir cepat aktif (2 1 3). Pivot 2
mempartisinya menjadi (1) dan (3), seperti yang ditunjukkan pada Gambar e. Terapkan
pengurutan cepat pada (1). Karena array hanya berisi satu elemen, tidak diperlukan partisi
lebih lanjut.

Algoritma quick-sort diimplementasikan pada Listing dibawah. Ada dua metode


quickSort yang kelebihan beban di kelas. Metode pertama (baris 2) digunakan untuk

Introduction to Programming
mengurutkan array. Yang kedua adalah metode pembantu (baris 6) yang mengurutkan
subarray dengan rentang yang ditentukan.

Introduction to Programming
Introduction to Programming
Metode partisi (baris 15–49) mempartisi daftar array[first..last] menggunakan pivot.
Elemen pertama dalam array parsial dipilih sebagai pivot (baris 16). Awalnya, poin
rendah ke elemen kedua di subarray (baris 17) dan poin tinggi ke elemen terakhir di
subarray (baris 18). Mulai dari kiri, metode mencari maju dalam larik untuk elemen
pertama yang lebih besar dari pivot (baris 22–23), kemudian mencari dari kanan ke
belakang untuk elemen pertama dalam larik yang kurang dari atau sama dengan poros
(baris 26-27). Ia kemudian menukar dua elemen ini dan mengulangi operasi pencarian
dan pertukaran yang sama sampai semua elemen dicari dalam loop while (baris 20–35).
Metode mengembalikan indeks baru untuk pivot yang membagi subarray menjadi dua
bagian jika pivot telah dipindahkan (baris 44). Jika tidak, ia mengembalikan indeks asli
untuk pivot (baris 47). Gambar dibawah mengilustrasikan cara mempartisi array (5 2 9 3
8 4 0 1 6 7). Pilih elemen pertama, 5, sebagai pivot. Awalnya, rendah adalah indeks yang
menunjuk ke elemen 2 dan tinggi menunjuk ke elemen 7, seperti yang ditunjukkan pada
Gambar a. Majukan indeks maju rendah untuk mencari elemen pertama (9) yang lebih
besar dari pivot, dan pindahkan indeks tinggi ke belakang untuk mencari elemen pertama
(1) yang kurang dari atau sama dengan pivot, seperti yang ditunjukkan pada Gambar b .
Tukar 9 dengan 1, seperti yang ditunjukkan pada Gambar c. Lanjutkan pencarian dan
bergerak rendah untuk menunjuk ke elemen 8 dan tinggi untuk menunjuk ke elemen 0,
seperti yang ditunjukkan pada Gambar d. Tukar elemen 8 dengan 0, seperti yang
ditunjukkan pada Gambar e. Terus bergerak rendah sampai melewati tinggi, seperti yang
ditunjukkan pada Gambar f. Sekarang semua elemen diperiksa. Tukar pivot dengan
elemen 4 pada indeks tinggi. Partisi terakhir ditunjukkan pada Gambar g. Indeks pivot
dikembalikan ketika metode selesai. Untuk demo interaktif tentang cara kerja partisi,
kunjungi liveexample.pearsoncmg.com/dsanimation/QuickSortNeweBook.

Introduction to Programming
Untuk mempartisi array dengan n elemen, dibutuhkan n perbandingan dan n gerakan
dalam kasus terburuk. Jadi, waktu yang diperlukan untuk partisi adalah O(n). Dalam
kasus terburuk, pivot membagi array setiap kali menjadi satu subarray besar dengan array
lainnya kosong. Ukuran subarray besar adalah satu kurang dari yang sebelum dibagi.
Algoritma membutuhkan (n - 1) + (n - 2) + g + 2 + 1 = O(n2 ) waktu. Dalam kasus
terbaik, pivot membagi array setiap kali menjadi dua bagian dengan ukuran yang hampir
sama. Misalkan T(n) menyatakan waktu yang diperlukan untuk menyortir sebuah array
dengan n elemen menggunakan quick sort. Jadi,

Introduction to Programming
Rata-rata, pivot tidak akan membagi array menjadi dua bagian dengan ukuran yang sama
atau satu bagian kosong setiap kali. Secara statistik, ukuran kedua bagian sangat dekat.
Oleh karena itu, waktu rata-ratanya adalah O(n logn). Analisis kasus rata-rata yang tepat
berada di luar cakupan buku ini. Penggabungan dan pengurutan cepat menggunakan
pendekatan membagi-dan-menaklukkan. Untuk pengurutan gabungan, sebagian besar
pekerjaannya adalah menggabungkan dua subdaftar, yang terjadi setelah subdaftar
diurutkan. Untuk quick sort, sebagian besar pekerjaan adalah mempartisi daftar menjadi
dua subdaftar, yang dilakukan sebelum subdaftar diurutkan. Merge sort lebih efisien
daripada quick sort dalam kasus terburuk, tetapi keduanya sama-sama efisien dalam kasus
rata-rata. Merge sort membutuhkan array sementara untuk menyortir dua subarray. Quick
sort tidak memerlukan ruang array tambahan. Dari pada merge sort.

Introduction to Programming
SIMPULAN

Pada pemrograman dikembangkan beberapa teknik pengurutan dengan 2 macam pembagian


algoritma, yakni algoritma pengurutan dasar dan algoritma pengurutan tingkat lanjut.

Algoritma pengurutan dasar terbagi menjadi 3 algoritma, yakni bubble sort, selection sort, dan
insertion sort. Algoritma bubble dan selection akan menghasilkan nilai terbesar atau terkecil
untuk setiap putarannya. Algoritma insertion akan menyisipkan element ke dalam sublist sesuai
dengan posisinya.

Algoritma pengurutan tingkat lanjut yang dibahas adalah merge sort. Dalam merge sort ini
terdapat dua bagian yaitu split, dimana menjadi dua sub list dan kemudian bagian merge yaitu
berfungsi menggabungkan kembali sublist tersebut.

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 23

Introduction to Programming
LECTURE NOTES

Introduction to Programming
Week ke - 10

Introduction to Object Oriented


Programming
LEARNING OUTCOMES

1. Peserta diharapkan dapat mengerti dasar dasar java programming dan konsep objek oriented

Outline Materi

1. Introduction of OOP Concept

2. Object

3. Class

4. Class Relationship

a. Association

b. Inheritance

c. Aggregation and composition

5. Polymorphism and dynamic binding

6. Access modifier
ISI MATERI
1) Introduction to object oriented programming

Konsep pemrograman berbasis objek merupakan konsep yang popular dikarenakan


pembuatan sistem dengan penggambaran class dan object merupakan cara yang tepat dan
efisien dalam menggambarkan proses bisnis ke dalam sistem yang dikembangkan.
Pemorgraman berbasiskan object memungkinkan programmer untuk membuat software
dalam ukuran yang besar dan GUI secara efektif.

Konsep pemrograman berbasis objek atau OOP merupakan salah satu bentuk paradigma
pemrograman. Paradigma pemrograman terbagi menjadi 2, yakni :

a. Procedural / Structural /Modular Paradigm

Pada paradigma pemrograman ini struktur kode pada pembuatan program berupa fungsi –
fungsi atau juga biasa disebut sebagai modular programming dimana penjalanan program
melalui pemanggilan fungsi main sebagai fungsi utama dan akan menangani pemanggilan
fungsi lainnya.

b. Object Oriented Paradigm

Pada paradigma pemrograman ini struktur kode pada pembuatan program berupa kelas dan
objek dimana di dalam kelas terdapat fungsi – fungsi dan variabel – variabel yang baru dapat
diakses ketika telah dibuat objek dari kelas tersebut. Proses berjalannya dimulai dengan
pemanggilan fungsi main yang wajib bersifat static dan public agar dapat dijalankan tanpa
membuat objek dari kelas terlebih dahulu kemudian diikuti dengan pembuatan objek – objek
yang nantinya akan memanggil fungsi – fungsi untuk dijalankan.

Class Abstraction

Object dalam pemrograman harus memiliki method / behavior, properti, tipe dan identitas.
Semua data dan fungsi terbungkus dalam class dan object, sebagai contoh sebuah object
Circle (lingkaran) mempunyai data radius. Sebuah Circle dapat memiliki behavior seperti
method getArea() , getPerimeter(), dan setRadius(radius).Class abstraction adalah pemisahan

Introduction to Programming
antara implementasi class dengan penggunaan sebuah class. Detail dari implementasi di
enkapsulasi dan disembunyikan dari user. Fungsi dari class dapat diketahui oleh user tetapi
implementasi rinci dari class tersebut disembunyikan dari user, hal inilah yang disebut
dengan class encapsulation

Keuntungan penggunaan Pemrograman Berbasiskan Object (PBO)

Dengan adanya penerapan konsep pemrograman berbasis objek maka diperoleh beberapa
keuntungan sebagai berikut:

1. Memungkinkan pemodelan sistem dengan bentuk objek dari dunia nyata.


Contoh objek dunia nyata adanya kelas transaksi dan akan ada objek dari kelas transaksi
yang diberi nama daftar_transaksi.

2. Mendukung penggunaan kembali kode yang sudah ada tanpa perlu membuatnya kembali.
Dengan adanya pemrograman berbasis objek maka sebuah proses dapat dinyatakan
sebagai sebuah fungsi atau method dan ketika ingin melakukan proses tersebut
pengembang tidak perlu lagi membuat kode yang sama untuk subsistem yang berbeda
namun cukup dengan pembuatan objek dari kelas tersebut dan memanggil fungsinya.

3. Meningkatkan fleksibilitas dalam tahapan modifikasi sistem.


Hal ini dikarenakan dengan adanya konsep pemrograman berbasis objek maka ketika
terjadi penambahan proses maupun perubahan dari sistem yang telah dikembangkan
semua proses terkait dengan proses yang diubah akan ikut berubah dan proses yang
inginditambahkan pun cukup memanggil proses yang telah dibuat sebelumnya jika masih
terkait dengan proses yang sama.

4. Membantu memudahakan dalam maintenance dari aplikasi yang telah berjalan.


Hal ini dikarenakan dengan adanya konsep pemrograman berbasis objek maka ketika
terjadi modifikasi dari suatu bagian sistem maka akan yang akan dilakukan perubahan
hanya method, kelas, dan variabel terkait perubahan dan semua proses yang depedensi
dikarenakan menggunakan objek dari kelas tersebut akan secara langsung mengikuti

Introduction to Programming
perubahan yang dibuat.

2) Object

Sebuah object menggambarkan sebuah entitas dalam dunia nyata. Sebuah object juga
merupakan sebuah produk dari sebuah lass. Object memiliki property dan behavior. Method
dan property hanya dapat diakses ketika object dari kelas telah dibuat atau didalam kelas itu
sendiri. Sebagai contoh sebuah object bernama circle1 mempunyai radius 1 dan circle2
mempunyai radius 25. Radius yang dimiliki oleh object Circle merupakan karakteristik yang
menjelaskan object circle tersebut. Adapun behavior dari sebuah object didefinisikan dengan
method.

Terdapat tiga tahapan dalam membuat object dari sebuah class:

1. Deklarasi
Proses ini terjadi ketika objek tersebut di deklarasi namun belum dibuat objeknya.

2. Instansiasi
Proses ini terjadi dengan adanya keyword “new” yang artinya membuat objek dari
kelas tersebut.

3. Inisialisasi
Proses ini terjadi dengan pemanggilan constructor yang berguna untuk
menginisialisasi nilai property pada objek dari kelas tersebut.

3) Class

Sebuah class mendefinisikan property dan behavior dari object. Object sendiri
merepresentasikan sebuah entitas dalam dunia nyata. Class dapat digambarkan sebagai
sebuah kumpulan data dan method dalam sebuah unit untuk tujuan tertentu. Class juga
merupakan sebuah template, blueprint ataupun kontrak yang menjelaskan data dan method
yang akan dimiliki oleh sebuah object. Sebagai contoh sebuah Circle (lingkaran) mempunyai

Introduction to Programming
sebuah radius (jari – jari) sebagai data dan mempunyai method getArea, getPerimeter dan
setRadius.

Berikut merupakan komponen yang terdapat pada kelas.

1. Behavior merupakan method yang terdapat di dalam kelas.

2. Property merupakan variabel yang terdapat di dalam kelas.

3. Constructor merupakan method yang pertama kali dijalankan pada saat object dari
kelas tersebut dibuat yang berguna untuk inisialisasi nilai pada property dalam kelas.
Constructor merupakan method yang tidak memiliki return value dan wajib bersifat public
agar dapat diakses dari luar kelas sehingga object dari kelas tersebut dapat dibuat.

4. Destructor merupakan salah satu komponen yang dimiliki oleh kelas yang berupa
method yang akan dijalankan pada saat objek akan dihancurkan (destroy). Namun, method
ini tidak dapat dibuat di dalam kelas karena proses ini di kelola oleh kelas GarbageCollector
pada Java

Syntax penulisan sebuah class dan object adalah sebagai berikut :

[Modifier] Class Class_Name

//Constructor

[Modifier Should be Public] Class_Name

Statement;

//Property

[Modifier] [Data_Type] Variable_Name

Introduction to Programming
//behavior

[Modifier] [Return_Value_Type] Method_Name ([Param1], [Param2],…)

Statement;

//optional, if Return_Value_Type is not void

return Data_To_Be_Returned;

Perhatikan contoh dibawah ini :

Pada program di atas terdiri dari sebuah class yang bernama SimpleCircle dengan data yang
dimiliki radius bertipe double, serta memiliki 1 constructor dengan nama yang sama dengan
class, dan 1 method bernama getArea dengan tipe double. Pada main program didekalarasikan
sebuah object bernama circle1 dengan tipe SimpleCircle. Untuk mengakses nilai dari data radius
maka digunakan circle1.radius dan untuk menggunakan fungsi getArea maka dipanggil dengan
cara circle1.getArea().

Introduction to Programming
Contructor dipanggil untuk membuat sebuah object baru. Selain itu sebuah constructor dapat
melakukan tugas apapun, namun sebenarnya constructor di desain untuk melakukan inisialisasi
awal. Constructor merupakan method yang pertama kali dipanggil saat object di inisiasi.
Constructor tidak memiliki nilai balik dan harus mempunyai nama yang sama dengan class
tersebut.

Static Variable, Constant and Method

Variabel di dalam sebuah object terikat dalam object tertentu dari class tersebut, sehingga tidak
dapat digunakan oleh object lain walaupun berada dalam class yang sama. Untuk mengatasi hal
tersebut maka dapat digunakan static variabel. Static variabel menyimpan nilai dari variabel pada
lokasi memory yang umum. Karena lokasi umum ini, sehingga jika sebuah object mengubah
nilai dari static variabel, maka semua object pada class yang sama juga terpengaruh.

Selain variabel static, java juga mendukung pemakaian method static. Sebelum menggunakan
variabel ataupun method static, maka perlu ditambahkan modifier static pada saat deklarasi
variabel ataupun method tersebut. Untuk constant dapat digunakan oleh semua object dalam
class tersebut. Namun constant harus di deklarasikan sebagai final static.

Introduction to Programming
Perhatikan contoh di bawah ini

Output

Pada contoh program di atas terdapat sebuah class dengan nama CircleWithStaticMember. Class
tersebut memiliki dua data yaitu radius bertipe double, dan sebuah static variabel bernama
numberofObjects dengan tipe int dan diberikan nilai awal 0. Terdapat dua buah constructor, 1
method dengan tipe double dan 1 method static.

Introduction to Programming
Sebelum object di create isi numberofObject adalah 0. Saat object c1 di buat maka nilai variabel
static numberofObject menjadi 1. Dikarenakan variabel tersebut adalah variabel static, maka
nilainya tetap digunakan saat object c2 di buat, sehingga nilainya menjadi 2. Variabel lainnya
yaitu radius nilainya akan sesuai dengan nilai pada object masing masing.

4) Class relationship

a. Association

Salah satu hubungan antar class adalah association. Association adalah


hubunugan binary antara dua class. Sebagai contoh seorang mahasiswa
mengambil sebuah matakuliah.Association digambarkan dengan notasi sebuah
garis antara dua class. Setiap hubungan dapat memilliki segitiga hitam yang
menjelaskan arah dari hubungan tersebut. Setiap class yang terlibat dapat
memiliki multiplicity. Multiplicity dapat terdiri dari sebuah bilangan ataupun
rentang bilangan yang menjelaskan berapa banyak object dalam class tersebut
yang terlibat dalam hubungan terkait.

Dari contoh di bawah ini terlihat bahwa seorang student dapat mengambil banyak
course dan seorang faculty member mengajar paling banyak 3 course
(matakuliah). Sebuah course dapat memiliki 5 sampai dengan 60 student dan
diajar hanya oleh seorang faculty member.

Gambar 1.1 Association

b. Inheritance
Inheritance (Pewarisan) adalah sebuah mekanisme untuk mendefinisikan class
baru dari class yang sudah ada. Adapun yang diwariskan dari class induk (super
class) ke class anak (sub class) adalah property dan behavior . Pewarisan ini
ditandai dengan penggunaan keyword extends pada kelas yang diwariskan
sehingga secara langsung menspesifikasikan kelas yang menjadi kelas induknya.

Introduction to Programming
Metode ini bertujuan untuk mengurangi redudansi sehingga pembuatan fungsi
tersebut cukup dibuat dikelas induk dan akan diwariskan ke kelas anak. Pada
diagram dibawah ini terlihat proses pewarisan dari class induk (super class) yaitu
GeometricObject ke class turunan yaitu Circle dan Rectangle. Pada diagram di
bawah pewarisan ditandai dengan notasi segitiga yang mengarah ke class induk.

Gambar 1.2 Inheritance

Class Diagram di bawah ini menjelaskan lebih rinci mengenai pewarisaan dari
class GeometricObject ke class turunan yaitu Circle dan Rectangle. Class Circle
mendapatkan semua data field dan method yang bisa diakses dari
GeometricObject. Sebagai tambahan, class Circle memiliki data yang baru yaitu
radius dan method yang get dan set. Circle juga memiliki method getArea(),
getPerimeter() dan getDiameter() untuk mengembalikan nilai area, perimeter dan
diameter dari circle. Class turunan lainnya yaitu Rectangle juga mendapatkan
semua data field dan method dari class GeometricObject. Sebagai tambahan class
Rectangle juga memiliki data field baru yaitu width dan height serta method get
dan set. Selain itu juga memiliki method getArea() dan getPerimeter() untuk
mengembalikan nilai area dan perimeter dari Rectangle.

Introduction to Programming
Gambar 1.3 Example Inheritance

Untuk implementasi dari inheritance, secara umum digambarkan sebagai berikut:

public class GeometricObject{

public class Circle extends GeometricObject{

public class Rectangle extends GeometricObject{

Secara detail, maka bisa dilihat dari program dibawah ini :

Class GeometricObject

Introduction to Programming
Berikut ini adalah Class Circle yang merupakan class turunan dari Class
GeometricObject. Keyword extends (baris 1) menjelaskan bahwa class Circle
merupakan class turunan dari class GeometricObject dan mewarisi method
getColor, setColor, isFilled, setFilled dan toString dari class GeometricObject.
Constructor Circle (double radius, String color, Boolean filled) di jalankan dengan
memanggil method setColor dan setFilled untuk menentukan property color dan
filled (baris 11 – 12). Method setColor dan setFiller diwariskan oleh
GeometricObject ke class Circle. Dikarenakan data color dan filled bersifat
private dan tidak diwariskan ke class turunannya, maka cara satu satunya adalah
dengan menggunakan method setColor dan setFilled yang

Introduction to Programming
diturunkan.

Berikut ini adalah Class Rectangle yang merupakan class turunan dari
GeometricObject. Keyword extends (baris 1) menginformasikan kepada compiler
bahwa class Rectangle merupakan class turunan dari GeometricObject yang juga
mewarisi method getColor, setColor, isFilled, dan toString.

Introduction to Programming
Berikut ini adalah main program yang membuat object Circle dan Rectangle, serta
memanggil method yang ada didalamnya. Method toString merupakan method
yang diturunkan oleh GeometricObject dan dipanggil di dalam object circle dan
rectangle.

Output:

Hal – hal berikut harus diperhatikan terkait dengan Inheritance:

• Sebuah class turunan (subclass) bukan bagian dari superclass, namun


sebuah subclass biasanya memiliki informasi (data) dan method yang lebih
banyak dari superclass nya

• Data field dengan modifier private pada sebuah superclass tidak dapat
diakses dari luar class, karenanya tidak bisa digunakan secara langsung
oleh subclass. Namun untuk mengakses data tersebut dapat digunakan
melalui method dengan modifier public yang didefinisikan di dalam
superclass

• Tidak semua hubungan is – a (sejenis) dapat dibuat menjadi inheritance.

Introduction to Programming
• Multiple inheritance dalam JAVA tidak dapat digunakan.

c. Aggregation and composition

Composition adalah hubungan antara dua object dimana satu object terdiri dari
object lainnya. Composition adalah kasus khusus dalam hubungan aggregation.
Model aggregation mempunyai hubungan has-a (memiliki) dan menggambarkan
hubungan kepemilikan antara dua object. Object pemilik disebut sebagai
aggregating object dan classnya disebut sebagai aggregating class. Sedangkan
object lainnya disebut sebagai aggregated object dan classnya disebut sebagai
aggregated class.

Sebuah object dapat dimiliki oleh beberapa aggregating object. Jika sebuah object
secara khusus dimiliki oleh sebuah aggregating object, maka hubungan ini disebut
sebagai composition. Sebagai contoh “seorang student (mahasiswa) memiliki
nama” adalah sebuah hubugan composition antara class Name dan class Student.
Hubungan antara class Student dengan Address adalah aggregation karena
address tersebut dapat digunakan oleh student lain. Aggregation juga
dimungkinkan antar object di dalam class yang sama Setiap class yang terlibat
dapat memiliki multiplicity. Multiplicity dapat terdiri dari sebuah bilangan
ataupun rentang bilangan yang menjelaskan berapa banyak object dalam class
tersebut yang terlibat dalam hubungan terkait.

Gambar 1.4 Aggregation and Composition

Introduction to Programming
Gambar 1.5 Aggregation and composition

5) Polymorphism and Dynamic Binding

Sebelum mempelajari polymorphism terdapat dua terminology yang akan digunakan yaitu
subtype dan supertype. Sebuah class akan mendefinisikan sebuah tipe. Sebuah tipe yang
didefinisikan oleh sebuah subclass disebut dengan subtype. Sebuah tipe yang didefinisikan
oleh superclass maka disebut dengan supertype. Dari contoh sebelumnya maka dapat
dikatakan bahwa Circle adalah subtype dari GeomettricObject dan GeometricObject adalah
supertype dari Circle. Polymorpshim ini memungkinkan sebuah object dari sebuah class
dapat digunakan oleh object dari superclass dimanapun dibutuhkan. Secara singkat dapat
dikatakan bahwa polymorphism memiliki arti sebuah pada supertype dapat merefer pada
object dari subtype.

Introduction to Programming
Output

Method displayObject (baris 10) menggunakan sebuah parameter dengan tipe


GeometricObject. Method displayObject dapat dipanggil dengan mengirimkan object ke
GeometricObject (contoh sebuah object baru Circle(1, “red”, false) dan object baru
Rectangle(1,1,”black”, false) ). Sebuah object dari subclass dapat digunakan digunakan
dimanapun saat superclass digunakan. Hal ini lah yang disesbut dengan polymorphism yang
berarti sebuah variabel dari supertype dapat merefer object dari subtype.

Dynamic Binding

Sebuah method dapat diimplementasikan pada beberapa class selama masih dalam
turunannya, JVM yang akan menentukan method mana yang akan dijalankan. Sebuah
method dapat didefinisikan di superclass dan di override di subclass.

Perhatikan contoh di bawah ini :

Introduction to Programming
Output

Method m (baris 9) menggunakan parameter dengan tipe object. m dapat dipanggil dengan
menggunakan object apa saja (contoh new GraduateStudent(), new Student(), newPerson(),
dan new Object() dalam baris 3 – 6) . saat method m(Object x) di jalankan, maka perintah
x.toString x dapat saja merupakan object dari GraduateStudent, Student, Person atau Object.
Masing – masing class tersebut mempunyai method toString tersendiri. Pada saat memanggil
m(new GraduateStudent) di baris ke 3 maka method toString yang ada dalam class Student
akan dipanggil. Pada saat m(new Student()) pada baris 4 dipanggil maka method toString
pada class Student yang akan dijalankan. Sedangkan pada saat m(new Person()) di panggil
maka method toString yang ada di class Person yang akan dijalankan. Terakhir saat m(new
Object()) yang dipanggil maka akan menjalankan method toString yang ada di class Object.
Compiler akan menjalankan method sesuai dengan tipe parameter, jumlah parameter, dan
urutan parameter.

6) Access modifier

Access Modifier merupakan pemberian tipe akses terhadap method, class, maupun property
untuk menyatakan jenis akses yang diberikan. Terdapat 4 jenis Access Modifier pada
pemrograman Java, yakni:

A. Private

Akses modifier ini membatasi pemberian akses sehingga komponen yang diberikan akses ini
hanya dapat diakses dari dalam kelas itu sendiri

Introduction to Programming
B. Protected

Akses modifier ini membatasi pemberian akses pada komponen sehingga komponen yang
diberikan akses ini hanya dapat diakses dari dalam kelas itu sendiri dan kelas turunannya.

C. Public

Akses modifier ini memungkinkan komponen yang berikan akses ini untuk dapat diakses dari
luar kelas itu melalui objek dari kelas itu.

D. Package

Akses modifier ini memungkinkan komponen yang diberikan akses ini untuk dapat diakses
dari luar kelas itu melalui objek dari kelas itu namun terbatas hanya pada package dimana
kelas tersebut di buat

Introduction to Programming
SIMPULAN

Pada bahasa pemrograman Java memungkinkan untuk pengembangan program dengan


paradigma berbasis objek dikarenakan Java merupakan bahasa pemrograman yang murni
mendukung konsep OOP.

Dengan adanya pengembangan program berbasis OOP ini dapat diperoleh beberapa keuntungan
antara lain adanya pemodelan dari objek nyata, menggunakan kembali kode yang sudah ada,
meningkatkan fleksibilitas dalam memodifikasi program, dan membantu memudahkan dalam
memperbaiki program.

Hubungan antar class terdiri atas association, inheritance dan composition. Association sendiri
adalah hubungan antar dua class yang dapat juga memiliki multiplicity.Inheritance (Pewarisan)
adalah sebuah mekanisme untuk mendefinisikan class baru dari class yang sudah ada. Dalam hal
ini maka keyword extend digunakan. Composition adalah hubungan dimana satu object dapat
terdiri dari object lainnya.

<< Nama mtk>>


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 12 , Chapter 6 , Chapter 7 , Chapter 8, Chapter 23, chapter 10,
chapter 11.

Introduction to Programming

Anda mungkin juga menyukai