Java Üzerinde Program Akış Kontrolleri

Akış Kontrolü Konuları

-Syntax-Semeantic Gösterim

-Boolean Expression

-Logical Operatörler

-Nasted if-else

-Multibranching if-else

-Shortcircuit Evolution

Akış Kontrolleri (Flow Control):

Programın akışını kontrol etmek için bazı öğeler kullanma durumudur.

If-Else Statements: 

Kodları belirtirken ii şekilde göstereceğiz.Bunlar daha önceden bahsettiğimiz syntax ve semantic gösterim. Syntax söz dizimini ifade ederken. Semantic gösterimde anlam açısından grafik ile ifadeler kullanacağız. Semantic karşılıkları grafikler ile eklerde de göstereceğim.

if (Boolean expression)
statement 1;
else 
statement 2;  //Temel if-else Syntaxini bu sekilde ifade edebiliriz.

Semantic gösterimi:

import java.util.Scanner; 
public class deneme {
public static void main(String[] args) {
  Scanner keyboard=new Scanner(System.in);
  double num=0; 
  System.out.println("Bir sayi giriniz:");
  num=keyboard.nextDouble();
  if (num<0)
  System.out.println("Negatif sayi girdiniz!.");
  else
  System.out.println(Math.sqrt(num));
}
}

Yukarıdaki kodda kullanıcıdan bir sayı girmesi istenilerek o sayının karekökünü vermeyi sağlıyoruz.If-else durumunu ortaya çıkaran girilebilecek bir negatif sayının karekök alınmamasına neden olabilecek olmasıdır. Karekök işlemi için de Math klasöründeki sqrt operatörünü çağırıyoruz. {} işaretlerinin kod içerisinde büyük önemi vardır.İki parantez arası bir blok oluşturur. Sadece if verilip else verilmeyebilir.Örneğin;

-if (Boolean expression)
statement;
-if (Boo exp)
{  statement1;
statement2;
}

Semantic gösterim bu durumda şöyle olur:

Start-> Evolution boolean exp.-> T->statement
   F->Continue with next statement
Boolean expression:
if (num <0)

Bu if ifadesinde iki operantı karşılaştırmak için < kullanılmıştır.Buna benzer farkı operantlar ve anlamları asagidaki gibidir: 

== iki operant birbirine esit mi?

!=  iki operant birbirinden farklı mı?

< küçük mü?

> büyük mü?

>= büyük esit mi?

<= kücük esit mi?

Logical operatörler:

&& -> ve 

|| -> veya

!  -> değil

if(num!=0) denktir if(num<0 || num>0)

Bütün bu operant ifadeleri primitive type için çalışır. String için işe yaramazlar. Stringler için durum:

== String için doğru çalışmaz.(Hata da vermez)

String s1="Ali", s2="Ali";

if (s1==s2) bu ifade string içerdiğinden == operantı doğru sonuç vermez bunun yerine ağıdaki gibi kullanmalıyız

if (s1.equals(s2)) //.equals bizim iki string ifadeyi karsilastirmamizi saglar.

if (s1.equalsIgnoreCase(s2)) //IgnoreCase büyük kücük harf kavramini ortadan kaldirarak esit olup olmadigini sormamizi saglar.

if (s1.compareTo(s2)) //compareTo karşılaştırma yapmaya yarayan lexicographical operanttir.

Nasted if-else:

if-else bazen içerisinde yine if-else bulundurabilir.Bu durumda parantez konumlarına göre farklı durumlar ortaya çıkabilir.Örneğin:

if (Bool expr1)
{  
if (Bool expr2)
statement1;
}
else
statement2; 

Semantic şema:

Diğer bir durumda parantezleri kaldırırsak:

if (Bool expr1)
if (Bool expr2)
statement1;
else
statement2; 

Semantic şema:

*Uyarı:Kodu yazarken if else konumlandırmaya dikkat edilmeli.Okunuluşta kolaylık sağlamalı.

Multibranching if-else: 

if else kendi içerisinde dallandırmaya yarar.
if (Bool exp1)
st1;
else if (Bool exp2)
st2;
else if (Bool exp3)
st3;

Buna yönelik TOBB Üniversitesinde uygulanan not sistemini içeren bir kod yazalım:

import java.util.Scanner;
public class Grader {
public static void main(String[] args){
  Scanner keyboard= new Scanner(System.in);
  int not=0;
  String harf_notu="";
  System.out.println("Notunuzu giriniz:");
  not= keyboard.nextInt();
  if (not>=90)
  harf_notu="AA";
  else if (not>=85)
  harf_notu="BA";
  else if (not>=80)
  harf_notu="BB";
  else if (not>=75)
  harf_notu="CB";  
  else if (not>=70)
  harf_notu="CC";
  else if (not>=65)
  harf_notu="DC";
  else if (not>=60)
  harf_notu="DD";
  else if (not>=55)
  harf_notu="FD";
  else if (not>=50)
  harf_notu="FF";
  System.out.println(harf_notu);
}
}

Aynı programı sadece if içerecek şekilde de yazabilirdik.

Precedence:

Öncelik sıralaması

1- <,>,==,!=

2- &&

3- ||

Shortcircuit Evolution (Lazy Evolution):

int a=5, b=2;

if ((a>3) || (b<4)) //bu ifadede a nın 5 ten büyük oldugunu fakat bnin 4 ten kucuk olmadıgını göruyoruz.Birinci yani a nın doğru olması shortcircuit evo. ile bütün ifadenin doğru olarak kabul edilmes

sine neden olur. Burada b nin yanlıslıgının bir önemi yoktur.Javanın sonraki ifadelere bakmama nedeni performans kazancı istemesi.

Tabiki bu durumun önüne geçebiliriz.Bunun için &&,|| gösterimlerini &,| (Compution evoluate*) şeklinde yazmak yeterlidir.Böylece java true-false olduğunu söylemek için bütün ifadeler inceler.

Tarih:
Hit: 1105188
Yazar: renegadealien



Yorumlar


Siftahı yapan siz olun
Yorum yapabilmek için üye girişi yapmalısınız.