E N D
Kontrol İfadeleri : 2.Kısım İçerikBir Kontrollü Döngü İfadesinde Olması GerekenlerforDöngü DeyimleriforDöngü Deyimi ile alakalı Örneklerdo…whileDöngü DeyimiswitchÇok Seçmeli KomutbreakvecontinueKomutlarıEtiketlibreakvecontinueKomutlarıMantıksal OperatörlerYapısal Programlama Özeti
Bir Kontrollü Döngü İfadesinde Olması Gerekenler • Sayaç-kontrollüdöngü : • Kontrol değişkeni (döngü sayacı) • Kontrol değişkenine ilk değer verme • Her dönüşte kontrol değişkenini artırma/azaltma • Kontrol değişkeninin son değere ulaşıp ulaşmadığını döngüdeki şart ile tespiti
foranahtar kelime Kontrol değişkeni Noktalı virgül ile ayrım Kontrol değişkenin son değeri Noktalı virgül ie ayrım for ( int counter = 1; counter <= 10; counter++ ) Kontrol değişkenin ilk değeri Döngünün şartı Kontrol değişkenin bir artımı forDöngü Komutu fordeyiminin ayrıntılı anlatımı.
forDöngü Yapısı for (ilk değer verme;döngü şartı;artış){komutlar; } Aynı ifade aşağıdaki gibi de yazılabilir: İlk değer verme;while(döngü şartı){komutlar;artış;}
forİfadeleri için Örnekler • fordeyiminde kontrol değişkenin değişimi • Kontrol değişkenini 1’den başlatıp 100 ‘e varıncaya kadar 1 artışla ilerletecek for deyimi • for ( int i = 1; i <= 100; i++ ) • Kontrol değişkenini 100’den başlatıp 1‘e varıncaya kadar 1’er 1’er azaltıp ilerletecek for deyimi • for ( int i = 100; i >= 1; i-- ) • Kontrol değişkenini 7’den başlatıp 7’şer artışla 77 kadar ilerleyecek for deyimi • for ( int i = 7; i <= 77; i += 7 )
Her for adımında numberı 2 arttır 1 // Toplam.java 2 // 1’den 100’e kadar çift sayıların toplamı. 3 import javax.swing.JOptionPane; 4 5 public classToplam { 6 7 public static void main( String args[] ) 8 { 9 inttoplam = 0; // ilk değer verme 10 11 // 2 den 100’e kadar çift sayıların toplamı 12 for ( intsayi = 2; sayi <= 100; sayi += 2 ) 13 toplam += sayi; 14 15 // display results 16 JOptionPane.showMessageDialog( null, “Toplam " + toplam, 17 “2-100 arasındaki çift sayıların toplamı", 18 JOptionPane.INFORMATION_MESSAGE ); 19 20 System.exit( 0 ); // uygulamayı bitir 21 22 } // end main 23 24 } // end class
1 // 2 // katlanarak artan faizi hesapla. 3 import java.text.NumberFormat; // sayısal format için gerekli class 4 import java.util.Locale; // bölgesel bilgiler için gerekli class 5 6 import javax.swing.JOptionPane; 7 import javax.swing.JTextArea;// metin alanı oluşturmak için 8 9 public classfaizHesapla { 10 11 public static void main( String args[] ) 12 { 13 doubletutar; // faiz getirisi+ anapara 14 doubleanapara = 1000.0; // anapara 15 doubleoran = 0.05; // faiz oranı 16 17 // create NumberFormat for currency in US dollar format 18 NumberFormat moneyFormat = NumberFormat.getCurrencyInstance( Locale.US ); 19 20 21 // çıktıyı göstermek için JTextArea nesnesi tanımla 22 JTextArea outputTextArea = new JTextArea(); 23 24 // text area ya ilk satırı set et. 25 outputTextArea.setText( "Yıl\t hesaptaki tutar\n" ); 26
27 // 10 yıl için her yıla ait miktarı hesapla 28 for ( intyil = 1; yil <= 10; yil++ ) 29 { 30 // yıl için miktarı hesapla 31 tutar = anapara * Math.pow( 1.0 + oran, yil ); 32 33 // outputTextArea nesnesine yeni bir satır ekle 34 outputTextArea.append( yil + "\t" + 35 moneyFormat.format( tutar ) + "\n" ); 36 37 } // end for 38 39 // sonucu göster 40 JOptionPane.showMessageDialog( null, outputTextArea, 41 “bileşik faiz hesabı", JOptionPane.INFORMATION_MESSAGE ); 42 43 System.exit( 0 ); 44 45 } // end main 46 47 } // end class Append=eklemek
Blok kodları [true] şart [false] do…whileDöngü İfadesi • do…whileyapısı • whilekomutuna benzer. • Bu döngü yapısında döngü içindeki blok en az bir defa çalışır. • do…whileakış diyagramı.
[true] case a case a action(s) [false] [false] [false] [true] caseb case b action(s) . . . [true] casez case z action(s) default action(s) break break break switchÇok-ŞeçmeliYapılar • switchdeyimi • Çok seçmeli zamanlar için kullanılır breakkomutu ileswitchakış diyagramı.
1 // SwitchTest.java 2 // kullanıcı seçimli doğru,dörtgen ve oval çizdirme. 3 import java.awt.Graphics; 4 5 import javax.swing.*; 6 7 public class SwitchTest extends JApplet { 8 intsecim; // kullanıcının şekil seçimi 9 10 // kullanıcı seçimini sorma ile apleti başlat 11 public void init() 12 { 13 String input; // kullanıcıdan alınacak değer 14 15 // kullanıcıya seçimini sor 16 input = JOptionPane.showInputDialog( 17 “doğru için 1\n" + 18 “dörtgen için 2\n" + 19 “oval için 3 giriniz\n" ); 20 21 secim = Integer.parseInt( input ); // string girişini int e çevir 22 23 } // end method init 24 25 // aplet üzerine şekilleri çiz 26 public void paint( Graphics g ) 27 { 28 super.paint( g ); // JApplet içerisinden paint metodunu çağır 29 30 for ( int i = 0; i < 10; i++ ) // 10 kez çalıştır 31 {
32 switch ( secim ) // hangi şekli çizeceğine karar ver 33 { 34 case1: // doğru çiz 35 g.drawLine( 10, 10, 250, 10 + i * 10 ); 36 break; // işlemi bitir 37 38 case2: // dörtgen çiz 39 g.drawRect( 10 + i * 10, 10 + i * 10, 40 50 + i * 10, 50 + i * 10 ); 41 break; // işlemi bitir 42 43 case3: // oval çiz 44 g.drawOval( 10 + i * 10, 10 + i * 10, 45 50 + i * 10, 50 + i * 10 ); 46 break; // işlemi bitir 47 48 default: // kullanıcı yanlış değer girdi 49 g.drawString( “yanlış seçim", 50 10, 20 + i * 15 ); 51 52 } // end switch 53 54 } // end for 55 56 } // end method paint 57 58 } // end class SwitchTest
breakvecontinuedeyimleri • break/continue • Programın akış sırasını değiştirir. • breakdeyimi • Kontrol yapısından çıkışı sağlar. • while, for, do…while or switchifadelerinde kullanılır • continuedeyimi • Döngünün başına döner. • while, for or do…whileifadelerinde kullanılır.
1 // BreakTest.java 2 // break deyimi ile dongüyü sonlandırma 3 import javax.swing.JOptionPane; 4 5 public class BreakTest { 6 7 public static void main( String args[] ) 8 { 9 String output = ""; 10 int count; 11 12 for ( count = 1; count <= 10; count++ ) { // dongu sayısı 10 13 14 if ( count == 5 ) // sayac 5 ise dögüyü sonlandır 15 break; 16 17 output += count + " "; 18 19 } // end for 20 21 output += "\n sayaç " + count+ ” olduğunda dongu sonlandırıldı”; 22 JOptionPane.showMessageDialog( null, output ); 23 24 System.exit( 0 ); // uygulamayı sonlandır 25 26 } // end main 27 28 } // end class
Sayaç 5 olduğunda 16. satırı atla ve dongu başına 11. satıra dön 1 // ContinueTest.java 2 // continue deyimi ile bir sonraki adıma geçme(dongu içinde). 3 import javax.swing.JOptionPane; 4 5 public class ContinueTest { 6 7 public static void main( String args[] ) 8 { 9 String output = ""; 10 11 for ( int count = 1; count <= 10; count++ ) { // 10 sefer işle 12 13 if ( count == 5 ) // sayaç 5 olduğunda dongudeki kodu 14 continue; 15 16 output += count + " "; 17 18 } // end for 19 20 output += "\n continue deyimi ile 5 sayısı atlandı"; 21 JOptionPane.showMessageDialog( null, output ); 22 23 System.exit( 0 ); 24 25 } // end main 26 27 } // end class ContinueTest
Etiketlibreakvecontinueİfadeleri • Etiketliblok • {}arasındaki kodlar • Parantez öncesi bloğu adlandırıcı etiket • Etiketlibreakifadesi • İçinde bulunduğu bloktan çıkmasını sağlar. • Blok sonundan çalışmaya devam eder. • Etiketlicontinueifadesi • Blok içindeki kodları atlar • Etiketin başına gelerek programa devam eder.
Stop etiketlenmiş blok 10 satır yazar İçteki dongu 5 sütün yazar Exit to line 35 (next slide) 1 // BreakLabelTest.java 2 // Labeled break statement. 3 import javax.swing.JOptionPane; 4 5 public class BreakLabelTest { 6 7 public static void main( String args[] ) 8 { 9 String output = ""; 10 11 stop: { // labeled block 12 13 // count 10 rows 14 for ( int row = 1; row <= 10; row++ ) { 15 16 // count 5 columns 17 for ( int column = 1; column <= 5 ; column++ ) { 18 19 if ( row == 5 ) // row 5 ise stop bloğundan çık 20 break stop; 21 22 output += "* "; 23 24 } // end inner for 25 26 output += "\n"; 27 28 } // end outer for 29
30 // following line is skipped 31 output += "\nLoops terminated normally"; 32 33 } // end labeled block 34 35 JOptionPane.showMessageDialog( null, output, 36 "Testing break with a label", 37 JOptionPane.INFORMATION_MESSAGE ); 38 39 System.exit( 0 ); // terminate application 40 41 } // end main 42 43 } // end class BreakLabelTest
nextRowetiketlenmiş blok Loop 5 times Nested loop 10 times continue to line 11 (nextRow) 1 // Fig. 5.14: ContinueLabelTest.java 2 // Labeled continue statement. 3 import javax.swing.JOptionPane; 4 5 public class ContinueLabelTest { 6 7 public static void main( String args[] ) 8 { 9 String output = ""; 10 11 nextRow: // target label of continue statement 12 13 // count 5 rows 14 for ( int row = 1; row <= 5; row++ ) { 15 output += "\n"; 16 17 // her satır için 10 kolon 18 for ( int column = 1; column <= 10; column++ ) { 19 20 // eğer colon > satır ise bir sonraki satıra geç 21 if ( column > row ) 22 continue nextRow; // bir sonraki adıma atla 23 24 output += "* "; 25 26 } // end inner for 27 28 } // end outer for
29 30 JOptionPane.showMessageDialog( null, output, 31 "Testing continue with a label", 32 JOptionPane.INFORMATION_MESSAGE ); 33 34 System.exit( 0 ); // terminate application 35 36 } // end main 37 38 } // end class ContinueLabelTest ContinueLabelTest.java
Mantısal Operatörler • Mantıksaloperatörler • Daha karışık şartlar oluşturmak amaçlı • Basit şartları birleştirmek amaçlı kullanılır. • Java mantıksaloperatörler • && (koşul AND) • & (mantıksal AND) • || (koşul OR) • | (mantıksal OR) • ^ (dışlayan OR) • ! (mantıksal NOT)
Yapısal Programlama (Özet) • Sıralı Yapılar • Java daki yerleşik ifadeler • SeçimliYapılar • if, if…elseveswitch • Tekrarlana Yapılar • while, do…whilevefor