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.