Anda di halaman 1dari 42

DIKTAT

PEMROGRAMAN I
(JAVA DASAR)

Oleh:
M. Dermawan Mulyodiputro, S.Si., M.Cs.

SEKOLAH TINGGI MANAJEMEN INFORMATIKA KOMPUTER


(STMIK) BUMIGORA MATARAM
2014 - 2015

SEJARAH JAVA
Dalam Bahasa Pemrograman Open Source. Java sedang banyak di pelajari oleh banyak orang
karena Java memiliki konsep yang sangat kuat dan mengacu pada oop (obyek oriented
programming). Untuk lebih mengenal dengan Bahasa Pemrograman Java kita pelajari terlebih
dahulu Sejarah Bahasa Pemrograman Java.
Sejarah bahasa pemrograman java di mulai pada tahun 1991. Sekelompok insinyur Sun di pimpin
oleh Patrick Naughton dan James Gosling yang mempunyai tujuan untuk merancang bahasa
computer untuk perangkat consumer seperti cable tv box. Karena perangkat tersebut tidak
memiliki banyak memori, bahasa harus berukuran kecil dan mengandung kode yang liat. Juga
karena manufaktur manufaktur berbeda memilih processor yang berbeda pula, maka bahasa
harus bebas dari manufaktur manapun. Proyek diberi nama kode Green.
Kebutuhan untuk fleksibilitas, kecil, liat dan kode yang netral terhadap platform mengantar tim
mempelajari implementasi Pascal yang pernah dicoba. Niklaus Wirth, pencipta bahasa Pascal
telah merancang bahasa portabel yang menghasilkan intermediate code untuk mesin hipotesis.
Mesin ini sering disebut dengan mesin maya (virtual machine). Kode ini kemudian dapat
digunakan di sembarang mesin yang memiliki interpreter. Proyek Green menggunakan mesin
maya untuk mengatasi isu utama tentang netral terhadap arsitektur mesin.
Sejarah bahasa pemrograman java terbentuk karena orang-orang di proyek Green berbasis C++
dan bukan Pascal maka kebanyakan sintaks diambil dari C++, serta mengadopsi orientasi objek
dan bukan prosedural. Mulanya bahasa yang diciptakan diberi nama Oak oleh James Gosling
yang mendapat inspirasi dari sebuah pohon yang berada pada seberang kantornya, namun
dikarenakan nama Oak sendiri merupakan nama bahasa pemrograman yang telah ada
sebelumnya, kemudian SUN menggantinya dengan Java. Nama Java sendiri terinspirasi pada saat
mereka sedang menikmati secangkir kopi di sebuah kedai kopi yang kemudian dengan tidak
sengaja salah satu dari mereka menyebutkan kata Java yang mengandung arti asal bijih kopi.
Akhirnya mereka sepakat untuk memberikan nama bahasa pemrograman tersebut dengan nama
Java.

CARA INSTAL JAVA PADA WINDOWS


Langkah pertama kita download melalui link (download di link lain juga bisa):
http://www.4shared.com/file/HYNoiIsw/jdk-7-windows-i586.html?locale=en.
Setelah selesai download. Silahkan Instal JAVA nya. Setelah selesai diinstall kita setting path
java-nya agar bisa execute di path mana saja. Cara Setting Path:
1. Klik Start -> Klik kanan Computer -> Pilih Properties -> pilih Advance System
Setting -> Pada tab Advanced pilih Environment Variables.
2. Tambahkan user variable.
Pada fieldset User Variables pilih New
Variable name : JAVA_HOME
Variable value : C:\Program Files\Java\jdk1.7.0
Klik OK

Masih pada fieldset User Variables, tambahkan user variable lagi dengan pilih New.
Variable name : PATH
Variable value : %PATH%;%JAVA_HOME%\bin
Klik OK

Catatan : untuk variable value JAVA_HOME disesuaikan dengan path direktori ketika
instal JDK.
3. Restart Komputer.
4. Cara memastikan setttingan JDK berhasil bisa dicek di command prompt, buka
CMD(Command Prompt) lalu ketikan Java, maka akan muncul dibawah ini:

5. Ketikan JAVAC, maka akan muncul seperti dibawah ini:

Jika semua command berjalan sesuai yang diatas maka Instalasi Java dengan setting path sukses
di lakukan.

CARA PENULISAN PROGRAM JAVA


Cara penulisan program java. Buka Notepad++ (bisa didownload di link: http://notepad-plusplus.org/download/v6.6.9.html). Lalu ketikan source code dibawah pada Notepad++. Setelah itu
save dengan nama sesuai nama class. Contoh dibawah nama class yaitu Hello. Save dengan nama
Hello.java (ingat: file harus di-save dalam format .java). Simpan di path url yang anda inginkan
(misalnya di: D:\Latihan Java).

Setelah di-save buka command prompt. Lalu cari path url file Hello.java tadi. Kemudian lakukan
penulisan execute file java:
1. [path_url_file]>javac Hello.java
2. [path_url_file]>java Hello

Jika berhasil maka akan menampilkan Output Hello world!.


Pada kode diatas, kita telah membuat sebuah program sederhana yang menampilkan tulisan
Hello World pada console. Terdapat beberapa aturan dalam membuat program dalam Java
yaitu :
1. Nama file harus sama dengan nama kelas program. Misalnya pada kode diatas nama
kelasnya adalah HelloWorld, maka nama file harus HelloWorld.java.
2. Hanya boleh terdapat satu kelas public pada sebuah file.
3. Kelas yang menjadi program harus memiliki metode public static void main(String[]
args).
5

4. Pada akhir statement harus menggunakan tanda ; (titik koma).


5. Anda sebaiknya menuliskan comment untuk menjelaskan perilaku dari sebuah class,
atau perilaku dari sebuah method.

COMMENT
Comments merupakan catatan yang ditulis pada sebuah code untuk tujuan dokumentasi. Catatan
tersebut bukanlah bagian dari program dan tidak mempengaruhi jalannya program.
3 Tipe comment pada Java yaitu: C++ Style Comment, C Style Comment, dan Special Javadoc
Comment.
1. C++-Style Comment
C++ Style comments diawali dengan tanda //
Semua text sesudah // merupakan sebuah comment
Contoh:
// Ini adalah C++ style atau single line comments

2. C-Style Comments
C-style comment disebut juga multiline comment, diawali dengan tanda /* dan
diakhiri dengan tanda */.
Semua text yang berada antara dua tanda tersebut adalah comment.
Tidak seperti C++ style comment, C-Style comment dapat menampung banyak
baris sekaligus.
Contoh:
/* Ini adalah contoh dari C style atau multiline comments
*/

3. Special Javadoc Comments


Special Javadoc comment digunakan untuk membuat sebuah dokumentasi HTML
untuk program Java Anda.
Anda dapat membuat javadoc comment dengan mengawali baris dengan /** dan
mengakhirinya dengan */.
Seperti C-style comments, comment ini dapat memuat banyak baris.
Comment ini dapat memuat tags untuk menambah informasi pada comment Anda.
Contoh:
/** This is an example of special java doc comments used
for \n generating an html documentation. It uses tags like:
@author Florence Balagtas @version 1.2 */

STATEMENT
Statement merupakan satu atau beberapa baris code diakhiri dengan sebuah tanda ; (titik koma).
Contoh:
System.out.println(Hello world);

BLOCK
Block adalah satu atau beberapa statement yang berada diantara tanda kurung kurawal buka dan
tanda kurung kurawal tutup yang mengelompokkan beberapa statement ke dalam sebuah unit.
Block statement dapat disarangkan tidak terbatas. Beberapa spasi kosong diperbolehkan.
Contoh:
public static void main( String[]args ){
System.out.println("Hello");
System.out.println("world);
}

STATEMENT DAN BLOCK


Untuk membuat block, Anda dapat menempatkan kurung kurawal buka satu baris setelah
deklarasi block. Contohnya:
public static void main(String[] args){

atau Anda dapat menambahkannya pada baris berikutnya seperti,


public static void main( String[] args )
{

Anda sebaiknya memasukkan statement pada baris selanjutnya setelah awal dari block.
Contohnya:
public static void main( String[] args ){
System.out.println("Hello");
System.out.println("world");
}

IDENTIFIER
Identifier Adalah token (tanda) yang mewakili nama dari variabel, method, class, dll. Contoh dari
identifier adalah: Hello, main, System, out.
Java identifier adalah case-sensitive. Hal ini berarti bahwa identifier Hello tidak sama dengan
hello.
Identifier harus diawali dengan huruf, tanda garis bawah _, tanda dolar $. Huruf dapat
menggunakan huruf kecil atau huruf kapital. Karakter selanjutnya dapat menggunakan angka dari
0 sampai 9.
Identifier tidak dapat menggunakan kata kunci Java (Java keyword) seperti class, public, void,
dll.
Untuk penamaan class, gunakan huruf kapital pada huruf awal dari nama class, contohnya:
ThisIsAnExampleOfClassName

Untuk nama dari method dan variabel, huruf awal menggunakan huruf kecil. Contohnya:
thisIsAnExampleOfMethodName

Pada saat memberikan nama identifier lebih dari satu kata, gunakan huruf kapital untuk
menunjukkan huruf awal dari kata selanjutnya kecuali kata awal. Contohnya:
charArray, fileNumber, ClassName.

Hindari penggunaan garis bawah pada awal identifier seperti _read atau _write.

KEYWORD
Keyword adalah identifier khusus yang sudah disediakan oleh Java untuk tujuan tertentu. Anda
tidak dapat menggunakan keyword sebagai nama dari variabel, class, method, dll.
Berikut adalah daftar dari Keyword:

LITERALS
Literals adalah tanda bahwa tidak terjadi perubahan atau konstan. Beberapa Literals dalam Java
yaitu:
1. Integer Literals
Integer literals dibedakan dalam beberapa format yang berbeda: desimal (berbasis 10),
heksadesimal (berbasis 16), and oktal (berbasis 8). Dalam penggunaan tipe data integer
pada program, kita harus mengikuti aturan penggunaan beberapa notasi khusus.
Untuk angka desimal, kita tidak memerlukan notasi khusus. Kita hanya menulis angka
desimal seperti apa adanya. untuk angka heksadesimal, hal itu harus ditandai oleh 0x
atau 0X. untuk oktal, ditandai oleh0.
Sebagai contoh, mewakili angka 12. Penulisan dalam bentuk desimalnya adalah 12,
Sementara dalam heksadesimal, menjadi 0xC, dan dalam oktal, nilai tersebut sama
dengan 014.

Default tipe data untuk integer literals adalah int. Int adalah signed 32-bit value. Pada
kasus-kasus tertentu Anda dapat berharap untuk memaksa integer literal untuk menjadi
tipe data long dengan menambahkan karakter l or L. tipe data long ditandai oleh
ditampilkannya data dalam 64-bit.
2. Floating-Point Literals
Floating point literals mewakili bentuk desimal dengan bagian yang terpisah. Sebagai
contoh adalah 3.1415. Floating point literals dapat dinyatakan dalam notasi standard atau
scientific. Sebagai contoh, 583.45 dinyatakan dalam notasi standard, Sementara 5.8345e2
dinyatakan dalam notasi scientific. Default Floating point literals mempunyai tipe data
double yang dinyatakan dalam 64-bit. Untuk menggunakan ketelitian yang lebih kecil
(32-bit) float, hanya dengan menambahkan karakter f atau F.
3. Boolean Literal
Boolean literals hanya memiliki dua nilai, true atau false.
4. Character Literals
Character Literals diwakili oleh karakter single Unicode. Karakter Unicode adalah 16-bit
character set yang menggantikan 8-bit ASCII character set. Unicode memungkinkan
penggunaan simbol dan karakter khusus dari bahasa lain. Untuk menggunakan character
literals, karakter tersebut di dalam tanda single pute ( ) (single quote delimiters). Sebagai
contoh huruf a, diwakili sebagai a. Untuk menggunakan karakter khusus seperti karakter
baris baru, backslash digunakan diikuti dengan karakter kode. Sebagai contoh, \n untuk
karakter baris baru atau ganti baris, \r untuk menyatakan nilai balik (carriage return),
\b untuk backspace.

5. String Literals
String literals mewakili beberapa karakter dan dinyatakan dalam tanda double pute ( )
(double quotes). Sebagai contoh string literal adalah, Hello World.

10

TIPE DATA PRIMITIF


Bahasa pemrograman Java mendefinisikan delapan tipe data primitif. Mereka diantaranya adalah
boolean (untuk bentuk logika), char (untuk bentuk tekstual), byte, short, int, long (integral),
double and float (floating point).
1. Logika boolean
Tipe data boolean diwakili oleh dua pernyataan : true dan false. Sebagai contoh:
boolean result = true;

Contoh yang ditunjukkan diatas, mendeklarasikan variabel yang dinamai result sebagai
tipe data boolean dan memberinya nilai true.
2. Teksual char
Tipe data character (char), diwakili oleh karakter single Unicode. Tipe data ini harus
memiliki ciri berada dalam tanda single quotes ( ). Sebagai contoh:
a //Huruf a
\t //A tab

Untuk menampilkan karakter khusus seperti (single quotes) atau (double quotes),
menggunakan karakter escape \. Sebagai contoh:
\ //untuk single quotes
\ //untuk double quotes

Meskipun String bukan merupakan tipe data primitif (namun merupakan suatu Class),
String mewakili tipe data yang terdiri atas beberapa karakter. Mereka tidak termasuk tipe
data primitif, melainkan suatu class. Mereka memiliki literal yang terdapat diantara tanda
double quotes ( ).
Sebagai contoh:
String message=Hello world!

3. Integral byte, short, int & long


Tipe data integral dalam Java menggunakan tiga bentuk- yaitu desimal, oktal atau
heksadesimal. Contohnya:
2 //nilai desimal 2
077 //angka 0 mengindikasikan nilai oktal
0xBACC //karakter 0x mengindikasikan nilai heksadesimal

Integral memiliki default tipe data yaitu int. Anda dapat merubahnya ke bentuk long
dengan menambahkan huruf l atau L. Tipe data integral memiliki range sebagai berikut:
11

4. Floating Point float dan double


Tipe Floating point memiliki double sebagai default tipe datanya. Floating-point literal
termasuk salah satunya desimal point atau salah satu dari pilihan berikut ini,
E or e //(add exponential value)
F or f //(float)
D or d //(double)
Contohnya adalah,
3.14 //nilai floating-point sederhana (a double)
6.02E23 //A nilai floating-point yang besar
2.718F //A nilai float size sederhana
123.4E+306D //A nilai double yang besar dengan nilai redundant D

Pada contoh yang ditunjukkan diatas, 23 setelah E pada contoh kedua bernilai positif.
Contoh tersebut sama dengan 6.02E+23. Tipe data Floating-point memiliki range sebagai
berikut:

Tabel berikut adalah rangkumannya:

12

VARIABEL
Variabel adalah item yang digunakan data untuk menyimpan pernyataan objek. Variabel
memiliki tipe data dan nama. Tipe data menandakan tipe nilai yang dapat dibentuk oleh variabel
itu sendiri. Nama variabel harus mengikuti aturan untuk identifier.
Syarat-syarat penamaan variabel adalah:
1. Harus diawalai dengan huruf.
2. Tidak boleh terdapat karakter unik seperti @, #, % dan lain-lain.
3. Tidak boleh mengandung karakter putih (spasi, enter, tab).
1.

Deklarasi dan Inisialisasi Variabel

Untuk deklarasi variabel adalah sebagai berikut,


<data tipe> <name> [=initial value];

Catatan: Nilainya berada diantara <> adalah nilai yang disyaratkan, sementara nilai dalam tanda
[] bersifat optional.
Tipe variabel dapat berupa tipe data atau kelas, misalnya :
int nilai;
char indexNilai;

Untuk menambahkan nilai ke sebuah variabel, maka dapat menggunakan tanda = (sama dengan) ,
misal jika kita akan menambahkan nilai 100 pada variabel nilai dan A pada variabel indexNilai, maka
dapat terlihat pada kode dibawah ini:
int nilai;
char indexNilai;
nilai = 100;
indexNilai = 'A';

Berikut ini adalah contoh program yang mendeklarasikan dan menginisialisasi beberapa variabel:

13

2.

Menampilkan Data Variabel

Untuk mengeluarkan nilai dari variabel yang diinginkan, kita dapat menggunakan perintah
sebagai berikut,
System.out.println()
System.out.print()

Berikut ini adalah contoh program:

Program tersebut akan mengeluarkan teks berikut pada layar,


10
The value of x=A

System.out.println() vs. System.out.print()


Apa yang membedakan diantara perintah System.out.println() and System.out.print()? Yang
pertama menambahkan baris baru pada akhir data untuk dikeluarkan, sementara selanjutnya
tidak. Perhatikan pernyataan tersebut,
System.out.print(Hello );
System.out.print(world!);
14

Pernyataan tersebut akan menghasilkan output berikut ini pada layar,


Hello world!

Sekarang perthatikan pernyataan berikut,


System.out.println(Hello );
System.out.println(world!);

Pernyataan ini akan menghasilkan output sebagai berikut pada layar,


Hello
world!

Contoh program variabel:


public class contohVariabel {
public static void main (String args[] ) {
int v1 ;
int v2;
int v;
v1=70;
v2=30;
v=v1+v2;
System.out.println(v1+ + +v2+ = +v);
v=v1-v2;
System.out.println(v1+ - +v2+ = +v);
}
}

15

KONVERSI TIPE DATA


Konversi tipe data sering dilkakukan jika terdapat lebih dari satu macam tipe data dalam satu
ekspresi atau statement.
Jika ada perintah untuk mengubah tipe data, konversi akan dilakukan secara implisit dan otomatis
oleh program Java. Konversi implisit hanya dapat dilakukan dengan mengubah tipe data ukuran
kecil ke tipe data ukuran yang lebih besar. Misalnya dari tipe byte menjadi short.

byte
short
int

float

long

double

Konversi tipe data dan presisi

Tanda panah dan garis putus-putus berarti ada kemungkinan perubahan nilai karena tidak presisi.
Misalnya dari tipe long menjadi tipe float. Long mempunyai rentang nilai yang lebih panjang
daripada float, karena itu bisa muncul kesalahan perhitungan.
Pengubahan mengikuti tipe data yang peling luas rentang nilainya. Jika salah satu variabel adalah
double, maka seluruh data akan diubah menjadi double. Jika tidak ada double dan adanya float,
maka seluruh data akan menjadi float. Terus demikian hingga long, int, dan terakhir short.
Berikut contoh dilakukannya konversi secara otomatis:
int x = 1;
int y = 2;
int z=x/y; //z bernilai 0 karena terjadi pembulatan hasil
x=1/2.0; //x bernilai 0.5 karena 2.0 adalah double

Konversi otomatis tidak dapat mengubah data ke tipe yang berukuran lebih kecil.
int i = 12;
byte z = i; //error
double xx = 10.75;
16

int yy = xx; //error

Konversi tipe data menjadi berukuran lebih kecil dapat dilakukan melalui casting. Perlu
diperhatikan bahwa ada kemungkinan terjadi perubahan nilai karena disesuaikan dengan tipe data
yang baru.
Sintaks yang digunakan adalah menggunakan tanda kurung pada tipe data yang diinginkan.
(tipe_data) ekspresi;

Contoh melakukan casting:


float f = (float) (10.1+12.2); //mengubah nilai menjadi float
int i = (int) f; // mengubah nilai dari variabel f menjadi int

Tambahan:
Dalam membuat program Java kita seringkali membutuhkan untuk mengkonversi nilai dari
sebuah String menjadi angka dan sebaliknya. Angka itu bisa integer atau double.
Misalnya dari tipe int ke String :
int a = 100;
String s = String.valueOf(a);

Kemudian dari String ke tipe int :


int b = Integer.valueOf(s);
double e = Double.valueOf(s);
Integer c = new Integer(s); //membuat object c
int d = Integer.parseInt(s);
double f = Double.parseDouble(s);

17

INPUT OUTPUT DENGAN CLASS SCANNER


Untuk menggunakan class scanner sebagai pembaca masukan dari keyboard ada beberapa hal
yang harus dilakukan:
1. Melakukan import class:
import java.util.Scanner;

2. Membuat object dari class sacnner:


Scanner input1 = new Scanner(system.in);

3. Gunkan method pada object untuk membaca masukan sesuai tipe data yang ingin dibaca.
Contoh:
nama = input1.nextLine(); //membaca masukan String
usia = input1.nextInt(); //membaca masukan int

Contoh program dengan class scanner:


import java.util.Scanner;
public class contohScanner {
public static void main (String args[] ) {
int usia;
String nama;
System.out.println(Nama :);

Scanner input1 = new Scanner(system.in);


nama = input1.nextLine();
System.out.println(Usia :);

usia = input1.nextInt();
System.out.println(Nama Anda : + nama);
System.out.println(Usia Anda : + usia + \n);
}
}

18

OPERATOR
Java merupakan bahasa pemrograman yang kaya akan operator. Operator-operator tersebut
dikelompokkan menjadi empat bagian besar, yaitu: Operator Aritmatika, Operator Relasi,
Operator Logika, dan Operator Bitwise. Kemudian ada juga Operator Kondisi.
1.

Operator Aritmatika

Operator aritmatika adalah operator-operator yang digunakan untuk melakukan perhitunganperhitungan matematis, seperti: penjumlahan, pengurangan, pembagian dan perkalian. Perhatikan
tabel berikut:
Operator
+
*
/
%
++
--

Keterangan
Penjumlahan
Pengurangan
Perkalian
Pembagian
Modulus (Sisa bagi)
Increment (Menaikan nilai dengan 1)
Decrement (Menurunkan nilai dengan 1)

Operand dari operator aritmatika harus bertipe numerik. Anda tidak dapat menggunakanya untuk
tipe data boolean .Sebagai perkecualian untuk tipe char, Anda masih dapat melakukan operasi
aritmatika karena sebenarnya, atau pada intinya, tipe char merupakan subset dari tipe int.
Berikut ini contoh sebuah operasi aritmatika:
int a = 5;
int b = 15;
c = a + b;

Selanjutnya, dalam java, operator modulus (%) digunakan untuk menentukan sisa bagi dari
sebuah operasi pembagian bilangan bulat (integer) maupun bilangan riil (floating-point).
Perhatian contoh kode berikut:
int x = 13;
int y = 5;
int z = a % b;

Disini nilai z akan bernilai 3. Nilai 3 ini berasal dari sisa pembagian variabel x dan y yang
menghasilkan nilai 2. Selanjutnya nilai 2 ini dikalikan 5 menghasilkan nilai 10, dan nilai 3 ini
berasal dari 13 dikurangi 10. Dengan kata lain, 3 adalah sisa bagi dari operasi pembagi 13/10.
Kemudian, untuk operator increment dan decrement, increment digunakan untuk menaikkan nilai
operand dengan nilai 1, sedangkan decrement merupakan kebalikanya yaitu menurunkan nilai
operand dengan nilai 1. Coba perhatikan kode berikut:
19

x = x + 1;

Code tersebut dapat ditulis dengan operator increment yaitu:


x++;

Adapun untuk proses decrement:


x = x - 1;

Code tersebut dapat ditulis dengan operator decrement yaitu:


x--;

Berikut adalah contoh program modulus:


public class contohModulus {
public static void main (String args[] ) {
int iHasil, iMod;
double dHasil, dMod;
iHasil = 10 /3;
iMod = 10%3;
dHasil =10.0/3.0;
dMod = 10.0 % 3.0;
System.out.println((integer) Hasil pembagian dan sisa bagi
dari 10/3 : + iHasil + + iMod);
System.out.println((Float) Hasil pembagian dan sisa bagi dari
10.0 / 3.0 : + dHasil + + dMod);
}
}

Contoh program increment dan decrement:


public class contohIncrement {
Publilc static void main (String args[] ) {
int a = 10;
a++;
System.out.println(a);
}
}

20

Berikut contoh program operator aritmatika:

21

2.

Operator Penugasan (Assignment)

Operator penugasan (assignment) digunakan untuk memasukkan nilai ke dalam suatu variabel.
Operator ini biasa dikenal dengan nama operator sama dengan (=).
Berikut ini tabel menjukkan daftar operator penyingkatan dalam java assignment atau proses
memasukkan nilai kedalam sebuah variabel.
Operator
+=
-=
*=
/=
%=

Keterangan
Assigment untuk penjumlahan
Assigment untuk pengurangan
Assigment untuk perkalian
Assigment untuk pembagian
Assigment untuk sisa bagi

Berikut contoh penggunaanya:


b
b
b
b

-=
*=
/=
%=

a;
a;
a;
a;

//sama
//sama
//sama
//sama

dengan
dengan
dengan
dengan

b
b
b
b

=
=
=
=

b
b
b
b

*
/
%

a
a
a
a

Contoh program operator penugasan:


public class contohPenugasan{
public static void main(String[] args) {
int a;
int b = 1;
System.out.println(Program deret Bilangan Ganjil);
Scanner input = new Scanner (System.in);
System.out.println(Masukan Angka: );
a = input.nextInt();
Do{
b += 2;
System.out.println( +b);
} while (b < a);
}
}

22

3.

Operator Relasi

Operator relasi adalah operator yang menyatakan hubungan satu operand dengan operand lainya
apakah sama dengan, tidak sama dengan, lebih besar, lebih kecil, lebih kecil atau sama dengan,
ataukah lebih besar atau sama dengan. Hasil yang diberikan dari operasi yang melibatkan
operator relasi akan bernilai boolean (true / false). Tabel berikut ini menunjukkan daftar operator
relasi yang terdapat dalam Java.
Operator
>
>=
<
<=
==
!=

Keterangan
Lebih besar
Lebih besar sama dengan
Lebih kecil
Lebih kecil sama dengan
Sama dengan
Tidak sama dengan

Operator == dan != dapat diterapkan ke tipe apapun, baik numerik, karakter, maupun boolean.
Adapun keempat operator lainya hanya dapat digunakan untuk tipe numerik dan char , untuk
mengetahui apakah suatu operand lebih besar atau lebih kecil dari operand lainya. Perhatikan
contoh kode berikut:
int x = 5;
int y = 10;
boolean z = x > b;

Disini nilai z akan bernilai false, karena pada kenyataanya nilai y lebih besar dari nilai x.
Berikut adalah contoh program operator relasi:
public class contohRelasi{
public static void main(String[] args) {
int i , j ;
boolean b1,b2;
i = 10;
j = 11 ;
if (i < j )
System.out.println(i < j) ;
if (i <= j )
System.out.println(i <=j) ;
if (i != j )
System.out.println(i != j) ;
b1 = true;
b2 = false;
if ( !(b1 & b2))
System.out.println(!(b1 & b2 ) is true);
if ( !(b1 I b2))
System.out.println(!(b1 I b2 ) is true);
23

if ( !(b1 ^ b2))
System.out.println(!(b1 ^

b2 ) is true);

4.

Operator Logika

Operator logika digunakan untuk melakukan operasi terhadap dua operand yang bertipe boolean.
Hasil yang diberikan pada operasi ini juga akan bertipe boolean. Berikut ini tabel yang
menunjukkan operator boolean.
Operator
&&
||
^
!

Keterangan
AND
OR
XOR
NOT

Apabila terdapat dua operand bernilai boolean (misalnya A dan B) dan keduanya digunakan
dalam operasi AND, OR, XOR, dan NOT, maka nilai-nilai yang dihasilkan sebagai berikut:
A

True

True

A && B
True

A || B
True

A^B
False

!A
False

True

False

False

True

True

False

False

True

False

True

True

True

False

False

False

False

False

True

Berikut adalah contoh program operator logika:


public class contohLogika {
public static void main(String[] args) {
System.out.println("Operasi AND");
System.out.println("true && true = " + (true && true));
System.out.println("true && false = " + (true && false));
System.out.println("false && true = " + (false && true));
System.out.println("false && false = " + (false && false));
System.out.println("\nOperasi OR");
System.out.println("true || true = " + (true || true));
System.out.println("true || false = " + (true || false));
System.out.println("false || true = " + (false || true));
System.out.println("false || false = " + (false || false));
System.out.println("\nOperasi XOR");
System.out.println("true ^ true = " + (true ^ true));
24

System.out.println("true ^ false = " + (true ^ false));


System.out.println("false ^ true = " + (false ^ true));
System.out.println("false ^ false = " + (false ^ false));
System.out.println("\nOperasi NOT");
System.out.println("!true = " + (!true));
System.out.println("!false = " + (!false));
}
}

5.

Operator Bitwise

Operator bitwise digunakan untuk melakukan operasi boolean terhadap dua buah
operand bertipe integer. Operasi ini dilakukan bit demi bit. Dengan demikian, secara
implisit nilai integer tersebut akan dikonversi terlebih dahulu kedalam bentuk biner.
Dalam operasi ini, nilai true direpresentasikan dengan nilai 1 dan false dengan nilai 0.
Berikut ini daftar operator bitwise yang terdapat didalam java:
Operator
&
|
^
~
>>
<<
>>>
<<<

Keterangan
AND
OR
XOR
NOT ( Negasi )
Shift Right
Shift Left

Berikut adalah contoh program operator bitwise:


public class contohLogika {
public static void main(String[] args) {
int x,y;
x= ~10;
System.out.println("Nilai Negasi "+x);
short z= 17 & 30;
System.out.println("Nilai AND "+z);
x= 17 | 30;
System.out.println("Nilai OR "+x);
x= 17 ^ 30;
System.out.println("Nilai XOR "+x);
x=111;
y= x >> 1;
25

System.out.println("Nilai
x=-111;
y= x >> 1;
System.out.println("Nilai
x= 111;
y= x >>> 1;
System.out.println("Nilai
x= -111;
y= x >>> 1;
System.out.println("Nilai
x= 111;
y= x << 1;
System.out.println("Nilai
x=1000;
y= x << y;
System.out.println("Nilai

geser kanan "+x);


geser kanan neg "+x);
geser kanan 1 bit 0 "+x);
geser kanan 1 bit 0 neg "+x);
geser kiri "+x);
geser kiri "+x);

}
}

6.

Operator Kondisi (?:)

Operator kondisi ?: adalah operator ternary. Hal ini berarti bahwa operator ini digunakan
dalam tiga bentuk pernyataan condisional argumen yang digunakan bersama-sama. Struktur
pernyataan yang menggunakan operator kondisi adalah,
exp1?exp2:exp3

Dimana nilai exp1 adalah suatu pernyataan boolean yang memiliki hasil yang salah satunya
harus berupa nilai true atau false.
Jika exp1 bernilai true, exp2 merupakan hasil operasi . Jika bernilai false, kemudian exp3
merupakan hasil operasinya.
Sebagai contoh, diberikan code sebagai berikut,
public class contohKondisi {
public static void main( String[] args ){
String
status = "";
int nilai = 80;
//mendapatkan status pelajar
status = (nilai >= 60)?"Lulus":"Gagal";
//print status
System.out.println( status );
}
}
26

MENGGUNAKAN IDE
Dalam membuat program Java, selain menggunakan command prompt dan notepad++, bisa
digunakan aplikasi khusus yaitu berupa IDE yang sangat membantu dalam membuat program
Java. IDE Java yang familiar digunakan adalah Eclipse IDE dan NetBeans IDE.
Disini diperkenalkan NetBeans IDE yang bisa didownload pada link:
https://netbeans.org/downloads/.
Sekilas tentang NetBeans IDE

NetBeans adalah salah satu aplikasi IDE yang digunakan programmer untuk menulis,
mengompile, mencari kesalahan, dan menyebarkan program. NetBeans ditulis dalam bahasa java
namun dapat juga mendukung bahasa pemrogramman lain. Program ini bebas digunakan.
Fitur-fitur pada NetBeans:
1. Smart code completion : mengusulkan nama variable dari suatu tipe, melengkapi
keyword, dan mengusulkan tipe parameter dari method.
2. Menggunakan code generator : dengan menggunakan fitur ini kita dapat meng-generate
constructor, setter and getter method, dll.
3. Error stripe : fitur yang menandai baris yang error dengan menghiglight merah.
4. Bookmarking : fitur yang digunakan untuk menandai baris yang suatu saat hendak kita
modifikasi.
5. go to commands : fitur yang digunakan untuk jump ke deklarasi variable, source code
atau file yang ada pada project yang sama.
Database yang didukung NetBeans:
1. JDBC merupakan spesifikasi standar dari javasoft API yang memungkinkan program
java untuk mengakses sistem database manajemen.
2. JDBC API terdiri dari satu set interface dan kelas yang ditulis dengan bahasa
pemrogramman java.
3. ojdbc (oracle java database conectivity) adalah driver yang menghubungkan program
java dan oracle.
4. mysql-connector-java adalah driver yang menghubungkan program java dan oracle
5. JDBC-ODBC.
6. mySQL-server.
27

NetBeans sebagai IDE ditujukan untuk memudahkan pemrograman Java. Pada bulan Februari
2006 para instruktur Java dari Sun Microsystem mengikuti training untuk beralih dari
pemrograman Java manual (memakai editor teks dan command prompt) ke pemrograman GUI
dengan Netbeans.
Netbeans berbasis visual dan event-driven. Sama seperti IDE lainnya, misal Borland Delphi dan
Microsoft Visual Studio. Netbeans mencakup compiler, builder dan debugger internal. Hal ini
memudahkan proses pasca perancangan program. Proses deployment atau tes dapat dilakukan
dengan NetBeans J2SE, J2EE, J2ME di NetBeans.
NetBeans seperti juga konsep Java sangat fleksibel. Sepanjang library Java tersedia, maka kita
dapat melakukan pemrograman untuk jenis aplikasi apapun. Kita dapat membuat aplikasi dekstop
(J2SE). Pemrograman web dan enterprise (J2EE) dapat dilakukan secara visual:
1. Koneksi server database melalui JDBC dapat dilakukan dari NetBeans, baik pada saat
perancangan maupun deployment program.
2. Pembuatan komponen beans.
3. Pembuatan Java Server Pages (JSP), web module (servicelocator dan servlet), web
services dengan menggunakan wizard yang telah disediakan.
NetBeans juga menyertakan paket web-server Apache Jakarta Tomcat, Sun Java System
Application Server, GlassFish dll. Server ini dapat diakses dari dalam NetBeans, baik pada saat
perancangan maupun saat deployment aplikasi web. Untuk membuat aplikasi mobile (MIDP),
MIDlet dapat dirancang dengan NetBeans.

MEMULAI MENGGUNAKAN NETBEANS IDE


Setelah didownload dan diinstal, maka kita mencoba membuat program pertama kita
menggunakan NetBeans. Ikuti langkah-langkah berikut (dan perhatikan gambar):
1. Buka program NetBeans, kemudian perhatikan pojok kiri atas program NetBeans.
Tambahkan sebuah New Project.

2. Maka akan muncul tampilan seperti gambar berikut, Pilih Java > Java Aplication.
Kemudian klik Next.
28

3. Maka akan muncul tampilan seperti gambar berikut.

4. Lalu di-uncheck tanda centang pada Creat Main Class dan Set as Main Project. Edit
Project Name menjadi ProjectPertama (atau terserah Anda menamakan apa). Kemudian
klik Finish.

29

5. Pada ProjectPertama yang baru dibuat, klik kanan pada Sorce Package dan pilih New >
Java Class.

6. Maka akan muncul tampilan seperti gambar berikut. Kemudian edit Class Name (terserah
Anda menamakan apa). Klik Finish.

7. Maka akan muncul tampilan seperti gambar berikut:

30

8. Masukkan coding didalam class KelasPertama, contohnya:

9. Kemudian klik Build Project (atau tekan F11).

10. Lalu klik Run Project (atau tekan F6).

11. Maka akan tertampil pada Output program:

31

PERCABANGAN
Percabangan adalah suatu pilihan atau opsi dengan kondisi tertentu. Jika kondisi yang menjadi
syarat terpenuhi, maka opsi atau pilihan dijalankan, jika tidak maka sebaliknya. Dalam java
terdapat 4 macam jenis percabangan, if, if-else, else-if, dan juga switch. Keempat jenis ini
memiliki penggunaan masing-masing. Berikut penjelasan mengenai penggunaan tiap-tiap jenis
percabangan:
1. if : Percabangan if ini digunakan jika kita hanya memiliki satu pernyaatan yang akan
dijalankan dengan syarat tertentu. Jika kondisi benar, maka pernyataan akan dijalankan.
2. if else : Percabangan if else digunakan saat kita memiliki dua pernyataan dengan syarat
tertentu. Jika hasil dari if benar, maka pernyataan1 yang dijalankan, sedangkan jika salah,
pernyataan dua yang akan dijalankan.
3. else-if : Percabangan yang digunakan saat kita memiliki banyak kondisi (lebih dari 2) dan
banyak pernyataan (lebih dari 2). jika kondisi1 benar, maka pernyataan1 akan dijalankan,
jika kondisi2 benar, maka penyataan2 akan dijalankan, jika semua kondisi salah, maka
penyataan4 yang akan dijalankan saja.
4. switch-case : Percabangan yang digunakan saat kita memiliki banyak kondisi (lebih dari
2) dan banyak pernyataan (ledbih dari 2). Sebenarnya switch-case ini hampir sama dengan
else if. Jika nilai variabel yang ditunjuk bernilai sesuai nilai1, maka pernyataan1 akan
dijalankan, jika nilai variabel yang ditunjuk bernilai sesuai nilai2, pernyataan2 dijalankan,
jika tidak, maka pernyataan3 yang akan dijalankan.

1.

Percabangan if

Bentuk pernyataan if berupa:


if (kondisi) {
// yang akan di jalankan
}

Contoh:
public class contohIf {
public static void main( String[] args ){
Scanner masukan = new Scanner (System.in);
int nilai;
System.out.println(Masukkan nilai akhir matakuliahnya :);
nilai = masukkan.nextInt();
if (nilai < 55)
System.out.println(Mahasiswa tersebut tidak lulus);
}
}
32

2.

Percabangan if else

Bentuk pernyataan if..else..berupa:


if (kondisi) {
//jalankan jika kondisi true
}else{
//jalankan jika kondisi false
}

Contoh:
public class contohIfElse {
public static void main( String[] args ){
int nilai = 8;
if (nilai == 10){
System.out.println(Sepuluh);
} else {
System.out.println(Bukan Sepuluh);
}
}
}

3.

Percabangan else-if

Bentuk pernyataan else-if adalah sebagai berikut:


if (kondisi) {
//perintah kondisi1
} else if (kondisi2) {
//perintah kondisi2
} else if (kondisi3) {
//perintah kondisi3
} else {
// perintah jika semua kondisi tidak ada yang benar
}

Contoh:
public class contohElseIf {
public static void main( String[] args ){
if (nilai >= 80)
System.out.println(Nilainya A);
else if (nilai >= 70)
33

System.out.println(Nilainya
else if (nilai >= 55)
System.out.println(Nilainya
else if (nilai >= 40)
System.out.println(Nilainya
else
System.out.println(Nilainya
}
}

B);
C);
D);
E);

}
}

4.

Percabangan switch-case

Bentuk pernyataannya switch-case adalah sebagai berikut:


switch (variabel) {
case nilai1:
//jalankan instruksi
break; // hentikan
case nilai2:
//jalankan instruksi
Break; // hentikan
default:
//jalankan instruksi
break; // hentikan
}

Contoh:
public class contohSwitchCase {
public static void main( String[] args ){
System.out.println(Masukkan angka 1-3 : );
int bil = masukan.nextInt();
switch (bil) {
case 1 : System.out.println(Satu); break;
case 2 : System.out.println(Dua); break;
case 3 : System.out.println(Tiga);
default : System.out.println(Bilangan di luar range);
}
}
}

34

PERULANGAN
Dalam Java terdapat 3 jenis perulangan yaitu while, do-while, dan for. Berikut penjelasan dari
ketiga jenis perulangan:
1. while : Pernyataan while berguna untuk melakukan proses perulangan untuk sebuah
kondisi, selama kondisi tersebut bernilai benar (true), maka perulangan akan terus
berjalan, dan berhenti ketika kondisi bernilai salah (false).
2. do-while : Merupakan perulangan yang hampir mirip dengan perulangan while namun
perbedaanya; pada perulangan do-while, maka minimal instruksi akan dijalankan
sekali.
3. for : Merupakan perulangan yang memiliki variabel untuk melakukan pengkondisian,
berbeda dengan while dan do-while yang kita harus membuat sebuah variabel diluar
untuk melakukan pengkondisian, pada perulangan for, ditempatkan sebuah blok untuk
membuat variabel dan melakukan proses pengkondisian.
1.

Perulangan while

Bentuk perulangan while adalah sebagai berikut:


while (kondisi) {
// isi instruksi
}

Contoh 1:
public class contohWhile1 {
public static void main( String[] args ){
int n=0, total=0, bil=9;
while (bil !=0) {
N++;
System.out.println(masukkan bilangan ke-+n+ : ) ;
bil = masukan.nextInt () ;
total +=bil;
}
System.out.println(total jumlah+(n-1)+ bilangan tsb : );
System.out.println(total);
}
}

35

Contoh 2:
import java.util.Scanner;
public class contohWhile2 {
public static void main( String[] args ){
int a;
int b = -1;
System.out.println("Program deret bilangan ganjil");
Scanner input = new Scanner (System.in);
System.out.print("Masukkan angka maksimal : ");
a = input.nextInt();
while (b < a) {
b += 2;
System.out.println(" " +b);
}
System.out.println();
}
}

2.

Perulangan do-while

Bentuk perulangan do-while adalah sebagai berikut:


do {
// instruksi
} while (kondisi);

Contoh1:
public class contohDoWhile1 {
public static void main( String[] args ){
int jumlah = 100;
do {
System.out.println(jumlah);
jumlah++;
} while (jumlah <= 10);
}
}

Contoh 2:
import java.util.Scanner;
public class contohDoWhile2 {
public static void main( String[] args ){
int a;
int b = 1;
36

System.out.println("Program deret bilangan ganjil");


Scanner input = new Scanner (System.in);
System.out.print("Masukkan angka maksimal : ");
a = input.nextInt();
do {
b += 2;
System.out.println(" " +b);
} while (b < a);
}
}

3.

Perulangan for

Bentuk perulangan for adalah sebagai berikut:


for (inisialisasi; kondisi ; penaikan/penurunan) {
//Instruksi
}

Contoh1:
public class contohDoWhile1 {
public static void main( String[] args ){
for (int i = 1 <5; i++) {
System.out.println(Hello World!!);
}
}
}

Contoh 2:
public class contohDoWhile2 {
public static void main( String[] args ){
int x, y;
for (ax1; x<=4; x++) {
for (y=1; y<=x; y++)
System.out.print(" * " );
System.out.println();
}
for (x=5; x>0; x--) {
for (y=0; y<x; y++)
System.out.print(" * " );
System.out.println();
}
}}
37

4.

Statement Break

Merupakan perintah yang dapat digunakan untuk menghentikan proses perulangan.


Contoh:
public class contohBreak {
public static void main( String[] args ){
System.out.println(Masukkan sebuah bilangan :
int bil = masukkan.nextInt();
boolean prima = true;

);

for (int i=2; i<bil; i++) {


if ((bil % i)== 0 ) {
Prima = false; break; }
}
if (prima)
System.out.println(bil + adalah bilangan Prima);
else
System.out.println(bil + adalah bukan bilangan Prima);
}
}
}
}

5.

Statement Continue

Perintah continue dapat digunakan untuk meloncati sebuah perulangan, maksudnya adalah
instruksi yang seharusnya dapat dilewat, hal ini berarti instrukti tidak akan dijalankan.
Contoh:
public class contohContinue {
public static void main( String[] args ){
for(int i = 1; i <= 100; i++){
if(i % 2 == 0){
continue;
}
System.out.println(i);
}
}
}

38

ARRAY
1. Pengenalan Array
Sebelumnya, kita telah mendiskusikan bagaimana cara pendeklarasian berbagai macam variabel
dengan menggunakan tipe data primitif. Dalam pendeklarasian variabel, kita sering menggunakan
sebuah tipe data beserta nama variabel atau identifier yang unik. Apabila kita ingin menggunakan
variabel tersebut, kita akan memanggil dengan nama identifier-nya. Sebagai contoh, kita
memiliki tiga variabel dengan tipe data int yang memiliki identifier berbeda untuk tiap variabel.
int number1;
int number2;
int number3;
number1=1;
number2=2;
number3=3;

Dari kode diatas, kita tidak perlu mendeklarasikan variabel yang banyak dengan tujuan sama.
Oleh karena itu digunakan array yang berfungsi mendeklarasikan variabel dengan tipe data yang
sama. Dalam Java maupun di bahasa pemrograman yang lain, terdapat sebuah kemampuan untuk
menggunakan satu variabel yang dapat menyimpan beberapa data dan memanipulasinya dengan
lebih efektif. Tipe variabel inilah yang disebut sebagai array. Contoh dari array integer sebagai
berikut.

Sebuah array akan menyimpan beberapa item data yang memiliki tipe data sama di dalam sebuah
blok memori yang berdekatan yang kemudian dibagai menjadi beberapa ruang. Array adalah
sebuah variabel/sebuah lokasi tertentu yang memiliki satu nama sebagai identifier, namun
identifier ini dapat menyimpan lebih dari sebuah nilai.
2. Pendeklarasian Array
Seperti yang telah dijelaskan secara singkat sebelumnya, array adalah kelompok variabel dengan
tipe sejenis dan dinyatakan dengannama yang sama. Dengan kata lain, array merupakan tipe
khusus yang menyatukan sekelompok variabel dengan tipe yang sama.
Array di Java dideklarasikan dengan kurung siku: []. Sintaks umum deklarasi array:
type var-name[];

atau
type[] var-name;

39

type berperan dalam mendeklarasikan tipe basis dari array. Tipe basis menentukan tipe data bagi
masing-masing elemen yang membentuk array. Dengan demikian, tipe basis untuk array
menentukan tipe data yang dimuat oleh array.
Berikut contoh-contoh deklarasi array di Java:
int numbers[];
char[] letters;
long grid[][];

Pada Java tidak perlu menspesifikasikan ukuran array kosong saat mendeklarasikan array. Kita
harus selalu menyatakan ukuran array secara eksplisit saat melakukan operasi penciptaan
menggunakan operator new() atau dengan mendaftarkan item-item untuk array pada saat
penciptaan.
Berikut contoh pendeklarasian array dengan menspesifikasikan ukuran spesifiknya menggunakan
operator new() dan dengan memberikan daftar item yang termasuk di dalam array :
char alphabet[] = new() char [26];
int primes = {7, 11, 13};

3. Jenis-jenis Array pada Java


3.1. Array 1 D
Array 1 dimensi pada dasarnya senarai (deretan) variabel bertipe serupa. Kita lebih dahulu
menciptakan variabel array dari tipe yang dikehendaki.
int monthDays[];

Meskipun deklarasi telah menetapkan bahwa monthDays adalah variabel array, namun
sesungguhnya tidak ada array yang diciptakan pada saat itu. Nilai dari monthDays adalah nilai
null yang merepresentasikan array tanpa nilai dan bukan bernilai nol.
Bentuk umum new() untuk array 1 dimensi adalah sebagai berikut:
array_var = new() type[size];

Dalam hal ini, type menspesifikasikan tipe data yang dialokasikan, size menspesifikasikan jumlah
dari elemen array, dan array-var adalah variabel array yang dirangkai ke array. Dengan
demikian, untuk menggunakan new(), kita harus menspesifikasikan tipe dan jumlah elemen
untuk dialokasikan. Elemen-elemen di array yang dialokasikan oleh new() akan secara otomatis
diinisialisasi ke nol.

40

Berikut ini salah satu contoh penciptaan untuk array yang berisi jumlah hari maksimum di
masing-masing bulan:
public class contohArray1D {
public static void main( String[] args ){
// langkah 1: deklarasi variabel array
int monthDays[];
// langkah 2: penciptaan array bilangan int dengan 12 elemen
monthDays = new int[12];
monthDays[0] = 31;
monthDays[1] = 29;
monthDays[2] = 31;
monthDays[3] = 30;
monthDays[4] = 31;
monthDays[5] = 30;
monthDays[6] = 31;
monthDays[7] = 31;
monthDays[8] = 30;
monthDays[9] = 31;
monthDays[10] = 30;
monthDays[11] = 31;
System.out.println("Agustus mempunyai "+monthDays[7]+"hari");
}
}

3.2. Array Multidimensi


Di Java, array multidimensi sesungguhnya array dari array. Untuk mendeklarasikan variabel
array, menspesifikasikan masing-masing indeks menggunakan himpunan kurung siku yang lain.
Array 2 dimensi bertipe int bernama intArr dideklarasikan dan diciptakan dengan perintah
sebagai berikut:
int int2DArr[][] = new() int [4][5];

Perintah ini mendeklarasikan dan mengalokasikan array 4 kali 5 dan memberikan ke variabel
int2DArr. Secara internal matriks ini diimplementasikan sebagai array dari array bertipe int.
Secara konseptual array ini digambarkan sebagai berikut:

41

Array 2 dimensi 4x5

Berikut contoh program yang memberikan angka ke masing-masing elemen di array dari kiri ke
kanan, puncak ke bawah, kemudian menampilkan masing-masing elemen:
public class contohArray2D {
public static void main( String[] args ){
//Langkah 1: deklarasi variabel array dan penciptaan array
int int2DArr[][] = new int[4][5];
int k=0;
for (int i=0;i<4;i++){
for (int j=0;j<5;j++){
int2DArr[i][j] = k++;
}
}
for (int i=0;i<4;i++){
for (int j=0;j<5;j++){
System.out.print(int2DArr[i][j] + " ");
}
System.out.println();
}
}}

42

Anda mungkin juga menyukai