BAB 6 Struktur Kontrol - JENI Intro1 Bab06 Struktur Kontrol
J.E.N.I .
BAB 6 St r u k t u r Kon t r ol 6 .1 Tu j u a n Pada bab sebelum nya, kit a sudah m endapat kan cont ah dari program sequent ial, dim ana
st at em ent dieksekusi set elah st at em ent sebelum nya dengan urut an t ert ent u. Pada
bagian ini, kit a m em pelaj ari t ent ang st rukt ur kont rol yang bert uj uan agar kit a dapat m enent ukan urut an st at em ent yang akan dieksekusi. Pada akhir bab, siswa diharapkan m am pu:
- Menggunakan st rukt ur kont rol keput usan ( if, else, sw it ch) yang digunakan unt uk
m em ilih blok kode yang akan dieksekusi
- Menggunakan st rukt ur kont rol pengulangan ( w hile, do- w hile, for) yang digunakan unt uk m elakukan pengulangan pada blok kode yang akan diekse
- Menggunakan st at em ent percabangan ( break, cont inue, ret urn) yang digunakan
unt uk m engat ur redirect ion dari program
6 .2 St r u k t u r Kon t r ol Ke pu t u sa n
St rukt ur kont rol keput usan adalah st at em ent dari Java yang m engij inkan user unt uk m em ilih dan m engeksekusi blok kode dan m engabaikan blok kode yang lain.
6 .2 .1 St a t e m e n t if
St at em ent - if m enent ukan sebuah st at em ent ( at au blok kode) yang akan dieksekusi j ika dan hanya j ika persyarat an boolean ( boolean st at em ent ) bernilai t rue. Bent uk dari st at em ent if, if( boolean_expression ) statement; at au if( boolean_expression ){ statement1; statement2; . . . }
J.E.N.I .
Gam bar 1: Flow chart St at em ent I f
dim ana, boolean_expression adalah sebuah persyarat an boolean ( boolean st at em ent ) at au boolean variabel. Berikut ini adalah cont oh code st at em ent if, int grade = 68; if( grade > 60 ) System.out.println("Congratulations!"); at au int grade = 68; if( grade > 60 ){ System.out.println("Congratulations!"); System.out.println("You passed!"); }
Pe t u n j u k Pe n u lisa n Pr ogr a m :
1. Boole a n _ e x pr e ssion pada st at em ent harus m erupakan nilai boolean.Hal ini berart i persyarat an harus bernilai t r ue at au fa lse .
2. Masukkan st at em ent di dalam blok if. Cont ohnya, if( boolean_expression ) { / / st at em ent 1; / / st at em ent 2; }
J.E.N.I .
6 .2 .2 St a t e m e n t if- e lse
St at em ent if- else digunakan apabila kit a ingin m engeksekusi sebuah st at em ent dengan kondisi t rue dan st at em ent yang lain dengan kondisi false. Bent uk st at em ent if- else, if( boolean_expression ) statement; else statement; dapat j uga dit ulis sepert i, if( boolean_expression ){ statement1; statement2; . . . } else{ statement1; statement2;
. . . }
Berikut ini cont oh code st at em ent if- else, int grade = 68; if( grade > 60 ) System.out.println("Congratulations!"); else System.out.println("Sorry you failed"); at au int grade = 68; if( grade > 60 ){ System.out.println("Congratulations!"); System.out.println("You passed!"); } else{
System.out.println("Sorry you failed"); } J.E.N.I .
Gam bar 2: Flowchart St at em ent I f- Else
Pe t u n j u k Pe n u lisa n Pr ogr a m :
1. Unt uk m enghindari kebingungan, selalu let akkan st at em ent di dalam blok if- else di
dalam t anda { } ,
2. Anda dapat m em iliki blok if- else yang bersarang. I ni berart i anda dapat m em iliki blok
if- else yang lain di dalam blok if- else. Cont ohnya, if( boolean_expression ) { if( boolean_expression ) {. . .
} } else{ . . . } J.E.N.I .
6 .2 .3 St a t e m e n t if- e lse - if St at em ent pada bagian else dar i blok if- else dapat m enj adi st rukt ur if- else y ang lain.
St rukt ur sepert i ini m engij inkan kit a unt uk m em buat seleksi persyarat an yang lebih kom pleks. Bent uk st at em ent if- else if, if( boolean_expression1 ) statement1; else if( boolean_expression2 ) statement2; else statement3;
Bisa anda cat at anda dapat m em iliki banyak blok else- if sesudah st at em ent if. Blok else bersifat opt ional dan dapat dihilangkan. Pada cont oh di bawah at as, j ika boolean_ex pression1 bernilai t rue, m aka program akan m engeksekusi st at em ent 1 dan m elew at i st at em ent yang lain. Jika boolean_expression2 bernilai t rue, m aka progr am akan m engeksekusi st at em ent 2 dan m elewat i st at em ent 3.
Gam bar 3: Flow chart St at em ent I f- Else- I f J.E.N.I .
Berikut ini cont oh code st at em ent if- else- if int grade = 68; if( grade > 90 ){ System.out.println("Very good!"); } else if( grade > 60 ){ System.out.println("Very good!"); } else{
System.out.println("Sorry you failed"); }
6 .2 .4 Ke sa la h a n u m u m k e t ik a m e n ggu n a k a n st a t e m e n t if- e lse :
1. Kondisi pada statem ent if bukan m erupakan nilai boolean. Contohnya, //BENAR int number = 0; if( number ){
//some statements here } Variabel num ber t idak m em iliki nilai Boolean.
2. Using = instead of = = for com parison. For exam ple, 3.
Menggunakan = daripada = = untuk operator perbandingan. Contohnya, //SALAH int number = 0; if( number = 0 ){ //Statement Selanjutnya }
Seharusnya code t ersebut dit ulis, //BENAR int number = 0; if( number == 0 ){ //Statement Selanjutnya } 3. Menulis elseif daripada else if.
J.E.N.I .
6 .2 .5 Con t oh st a t e m e n t if- e lse - e lse if
public class Grade { public static void main( String[] args ) { double grade = 92.0; if( grade >= 90 ){ System.out.println( "Excellent!" ); } else if( (grade < 90) && (grade >= 80)){ System.out.println("Good job!" ); } else if( (grade < 80) && (grade >= 60)){ System.out.println("Study harder!" ); } else{ System.out.println("Sorry, you failed."); } } } J.E.N.I .
6 .2 .6 St a t e m e n t sw it ch Cara lain unt uk m em buat percabangan adalah dengan m enggunakan kat a kunci sw it ch.
Dengan m enggunakan sw it ch kit a bisa m elakukan percabangan dengan persyarat an yang beragam . Bent uk st at em ent swit ch, switch( switch_expression ){ case case_selector1: statement1; // statement2; //block
1 . . . // break; case case_selector2: statement1; // statement2; //block
2 . . . // break;
. . . default: statement1; // statement2; //block n . . . // break;
} dim ana, swit ch_expression adalah persyarat an in t e ge r at au ch a r a ct e r dan case_select or1, case_select or2 dan set erusnya adalah konst ant a nilai int eger yang unique ( unik) . Ket ika st at em ent swit ch dit em ukan, pert am a kali Java m em eriksa swit ch_expression, dan m eloncat ke case dan m encocokkan nilai yang sam a dengan persyarat annya. Program m engeksekusi st at em ent dari awal sam pai m enem ui st at em ent break, dan m elew at i st at em ent yang lain sam pai akhir st rukt ur sw it ch. Jika t idak dit em ui case yang cocok, m aka program akan m engeksekusi blok default . Bisa anda cat at bahwa blok default adalah opt ional. Sebuah st at em ent swit ch bisa t idak m em iliki blok default .
CATATAN :
• Tidak sepert i st at em ent if, pada st rukt ur sw it ch st at em ent dieksekusi t anpa
m em erlukan t anda kurung kuraw al ( { } ) .• Ket ika sebuah case pada st at em ent sw it ch m enem ui kecocokan, sem ua st at em ent
pada case t ersebut akan dieksekusi. Tidak hanya dem ikian, st at em ent lain yang berada pada case yang cocok j uga dieksekusi.
• Unt uk m enghindari pr ogram m engeksekusi st at em ent pada case berikut nya, kit a
m enggunakan st at em ent br e a k sebagai st at em ent akhir.
J.E.N.I .
Gam bar 4: Flow chart St at em ent Sw it ch Pe t u n j u k Pe n u lisa n Pr ogr a m :
1. Menent ukan penggunaan st at em ent if at au st at em ent swit ch adalah sebuah
keput usan. Anda dapat m enent ukan yang m ana yang akan dipakai berdasarkan kem udahan m em baca program dan fakt or- fakt or yang lain.
2. St at em ent if dapat digunakan unt uk m em buat keput usan berdasarkan rent ang nilai
t ert ent u at au kondisi t ert ent u, sedangkan st at em ent sw it ch m em buat keput usan hanya berdasarkan nilai unique ( unik) dari int eger at au charact er.J.E.N.I .
6 .2 .7 Con t oh st a t e m e n t sw it ch
public class Grade { public static void main( String[] args ) { int grade = 92; switch(grade){ case 100: System.out.println( "Excellent!" ); break; case 90: System.out.println("Good job!" ); break; case 80: System.out.println("Study harder!" ); break; default: System.out.println("Sorry, you failed."); } } } J.E.N.I .
6 .3 St r u k t u r Kon t r ol Pe r u la n ga n
St rukt ur kont rol pengulangan adalah st at em ent dari Java dim ana kit a bisa m engeksekusi blok code berulang- ulang dalam kurun nilai t ert ent u. Ada t iga m acam j enis st rukt ur kont rol pengulangan yait u while, do- w hile, dan for- loops.
6 .3 .1 w h ile loop
St at em ent while loop adalah st at em ent at au blok st at em ent yang diulang- ulang sam pai m encapai kondisi yang cocok. Bent uk st at em ent while, while( boolean_expression ){ statement1; statement2;
. . . }
St at em ent di dalam w hile loop akan dieksekusi berulang- ulang selam a boolean_expression bernilai t rue. Cont oh, pada code dibawah ini, int i = 4; while ( i > 0 ){ System.out.print(i); i--; }
Cont oh diat as akan m encet ak angka 4321 pada layar. Perlu dicat at j ika bagian i- - ; dihilangkan, akan m enghasilkan looping yang t idak berhent i ( in fin it e loop) . Sehingga, ket ika m enggunakan w hile loop at au bent uk pengulangan yang lain, past ikan Anda m em berikan st at em ent yang m em buat pengulangan berhent i pada suat u t it ik.
J.E.N.I .
Berikut ini adalah beberapa cont oh w hile loop,
Con t oh 1 :
int x = 0; while (x<10) {
System.out.println(x); x++; }
Con t oh 2 :
//infinite loop while(true) System.out.println(“hello”);
Con t oh 3 :
//no loops // statement is not even executed while (false) System.out.println(“hello”); J.E.N.I .
6 .3 .2 do- w h ile loop
Do- while loop m irip dengan w hile- loop. St at em ent di dalam do- while loop akan dieksekusi beberapa kali selam a k ondisi bernilai t rue. Perbedaan ant ara while dan do- while loop adalah dim ana st at em ent di dalam do- while loop dieksekusi sedikit nya sa t u k a li. Bent uk st at em ent do- while, do{ statement1; statement2;
. . . }while( boolean_expression );
St at em ent di dalam do- while loop akan dieksekusi pert am a kali, dan dilakukan pengecekan kondisi dari boolean_expression. Jika nilai t ersebut belum m encapai nilai yang diinginkan, st at em ent akan dieksekusi lagi. Berikut ini beberapa cont oh do- w hile loop:
Con t oh 1 :
int x = 0; do { System.out.println(x); x++; }while (x<10); Cont oh ini akan m em berikan out put 0123456789 pada layar.
Con t oh 2 :
//infinite loop do{ System.out.println(“hello”);
} while (true); Cont oh di at as akan m elakukan pengulangan yang t idak berhent i unt uk m enulis “ hello” pada layar.
Con t oh 3 :
//one loop // statement is executed once do System.out.println(“hello”); while (false);
Cont oh di at as akan m em berikan out put hello pada layar.
J.E.N.I .
Pa n du a n pe m r ogr a m a n :
1. Kesalahan pem rogram an ket ika m enggunakan do- while loop adalah lupa unt uk m enulis t it ik kom a ( ; ) set elah ekspresi while.
do{ ... } w hile( boolean_expression) / / - Æ salah> tidak ada titik kom a( ; ) 2. Sepert i pada w hile loop, past ikan do- w hile loop anda berhent i pada suat u t it ik.
6 .3 .3 for loop
Sepert i pada st rukt ur pengulangan sebelum nya yait u m elakukan pengulangan eksekusi code beberapa kali. Bent uk dari for loop, for (InitializationExpression; LoopCondition; StepExpression){ statement1; statement2; . . . } dim ana,
I n it ia liz a t ion Ex pr e ssion – inisialisasi dari variabel loop. LoopCon dit ion m em bandingkan variabel loop pada nilai bat as. - St e pEx pr e ssion - m elakukan updat e pada variabel loop.
Berikut ini adalah cont oh dari for loop, int i; for( i = 0; i < 10; i++ ){ System.out.print(i); }
Pada cont oh ini, st at em ent i= 0 m erupakan inisialisasi dari variabel. Selanj ut nya, kondisi i< 10 diperiksa. Jika kondisi bernilai t rue, st at em ent di dalam for loop diek sekusi. Kem udian, st at em ent i+ + dieksekusi, dan dilakukan pengecekan kondisi. Kondisi ini akan dilakukan berulang- ulang sam pai m encapai nilai yang salah ( false) .
Cont oh t adi, adalah cont oh yang sam a dari w hile loop, int i = 0; while( i < 10 ){ System.out.print(i); i++; }
J.E.N.I .
6 .4 Br a n ch in g St a t e m e n t s
Branching st at em ent s m engij inkan kit a unt uk m engat ur j alannya eksekusi program . Java m em berikan t iga bent uk branching st at em ent s: break, cont inue dan ret urn.
6 .4 .1 br e a k st a t e m e n t St at em ent break m em ilik i dua bent uk: unlabeled dan labeled.
6 .4 .1 .1 Un la be le d br e a k st a t e m e n t
Unlabeled m enghent ikan j alannya st at em ent swit ch. Anda bisa j uga m enggunakan bent uk unlabeled unt uk m enghent ikan for, w hile at au do- w hile loop. Cont ohnya,
String names[] = {"Beah", "Bianca", "Lance", "Belle", "Nico", "Yza", "Gem", "Ethan"};
String searchName = "Yza"; boolean foundName = false; for( int i=0; i< names.length; i++ ){ if( names[i].equals( searchName )){ foundName = true;
break;
} } if( foundName ){
System.out.println( searchName + " found!" ); } else{
System.out.println( searchName + " not found." ); }
Pada cont oh ini, j ika st ring “ Yza” dit em ukan, pengulangan pada for loop akan dihent ikan dan akan m elanj ut kan ke proses berikut nya.
J.E.N.I .
6 .4 .1 .2 La be le d br e a k st a t e m e n t
Bent uk labeled form dari st at em ent break akan m enghent ikan st at em ent luar, dim ana diident ifikasikan berupa label pada st at em ent break. Program ber ikut ini akan m encari nilai dalam array dua dim ensi. Terdapat dua pengulangan bersarang ( nest ed loop) . Ket ika sebuah nilai dit em ukan, labeled break akan m enghent ikan st at em ent yang diberi label searchLabel, dim ana label ini berada di luar. int[][] numbers = {{1, 2, 3},
{4, 5, 6}, {7, 8, 9}}; int searchNum = 5; boolean foundNum = false;
searchLabel:
for( int i=0; i<numbers.length; i++ ){ for( int j=0; j<numbers[i].length; j++ ){ if( searchNum == numbers[i][j] ){ foundNum = true;
break searchLabel;
} } } if( foundNum ){
System.out.println( searchNum + " found!" ); } else{
System.out.println( searchNum + " not found!" ); }
St at em ent break m enghent ikan sem ent era labeled st at em ent ; ia t idak lagi m enj alankan flow cont rol pada label. Flow cont rol pada label ak an di- t ransfer secara ot om at is m engikut i labeled st at em ent .
J.E.N.I .
6 .4 .2 Con t in u e st a t e m e n t
St at em ent cont inue m em iliki dua bent uk: unlabeled dan labeled. Anda dapat m enggunakan st at em ent cont inue unt uk m elewat i pengulangan dari for, while, at au do- w hile loop yang sedang berj alan.
6 .4 .2 .1 Un la be le d con t in ue st a t e m e n t
Bent uk unlabeled akan m elew at i akhir st at em ent pada bagian yang dalam dan m em eriksa boolean ex pression yang m engkont rol loop, pada dasarnya akan m elewat i bagian pengulangan pada loop. Berikut ini adalah cont oh dari penghit ungan angka dari “ Beah” dalam suat u array.
String names[] = {"Beah", "Bianca", "Lance", "Beah"}; int count = 0; for( int i=0; i<names.length; i++ ){ if( !names[i].equals("Beah") ){ continue; //skip next statement
} count++; } System.out.println("There are " + count + " Beahs in the list");
6 .4 .2 .2 La be le d con t in u e st a t e m e n t
Bent uk labeled akan m elanj ut kan sebuah st at em ent dengan m elewat i pengulangan yang sedang berj alan dari loop t erluar yang diberi label ( t anda) .
outerLoop:
for( int i=0; i<5; i++ ){ for( int j=0; j<5; j++ ){ System.out.println("Inside for(j) loop"); //message1
continue outerLoop;
if( j == 2 ) }
System.out.println("Inside for(i) loop"); //message2 }
Pada cont oh ini, pesan ke- 2 t idak dicet ak, karena st at em ent cont inue akan m elewat i pengulangan yang sedang berj alan.
J.E.N.I .
6 .4 .3 Re t u r n st a t e m e n t
St at em ent ret urn digunakan unt uk keluar dari sebuah fungsi ( m et hod) . St at em ent ret urn m em ilik i dua bent uk: m enggunakan sebuah nilai, dan t idak m em berikan nilai. Unt uk m em berikan sebuah nilai, cukup berikan nilai ( at au ekspresi yang m enghasilkan sebuah nilai) sesudah ret urn. Cont ohnya, return ++count; at au return "Hello";
Tipe dat a dari nilai yang diberikan harus sam a dengan t ipe dari fungsi yang dideklarasik an. Ket ika sebuah m et hod void dideklariskan, gunakan bent uk ret urn yang t idak m em berikan nilai. Cont ohnya, return; Kit a akan m em bahas lebih lanj ut t ent ang st at em ent ret urn ket ika m em pelaj ari t ent ang fungsi.
J.E.N.I .
6 .5 La t ih a n 6 .5 .1 N ila i
Am bil t iga nilai uj ian dari user dan hit ung nilai rat a- r at a dari nilai t ersebut . Ber ikan out put rat a- rat a dari t iga uj ian. Berikan j uga sm iley face pada out put j ika nilai rat a- rat a lebih besar at au sam a dengan 60, selain it u beri out put : - ( .
1. Gunakan BufferedReader untuk m endapat input dari user, dan System .out untuk out put hasilnya.
2. Gunakan JOptionPane untuk m endapat input dari user dan output hasilnya.
6 .5 .2 M e m ba ca Bila n ga n
Am bil sebuah angka sebagai input dari user , dan out put nya berupa kat a yang sesuai dengan angka. Angka yang dim asukkan ant ara 1- 10. Jika user m em asukkan nilai yang t idak sesuai berikan out put “ I nvalid num ber” .
1. Gunakan statem ent if-else untuk m enyelesaikan 2.
Gunakan statem ent switch untuk m enyelesaikan
6 .5 .3 Ce t a k Se r a t u s Ka li
Buat sebuah program yang m encet ak nam a Anda selam a serat us kali. Buat t iga versi program ini m enggunakan w hile loop, do w hile dan for- loop.
6 .5 .4 Pe r pa n gk a t a n
Hit ung pangkat sebuah nilai berdasarkan angka dan nilai pangkat nya. Buat t iga versi dari program ini m enggunakan while loop, do- w hile dan for- loop.