instagram twitter linkedin github youtube

30.7.19

Java da switch case

Bir programda çok sayıda koşul kontrolü ve bunların sonucuna göre gerçekleştirilmesi gereken işlemler varsa, if-else yapıları ile akışın izlenmesi zorlaşabilir. Böyle durumlar genellikle switch deyiminin kullanılmasının gerekli olacağı durumlardır. switch deyimi, tek bir ifadenin değerine göre sınırsız sayıda çalıştırma yolu belirlemeyi sağlayan bir komuttur.

switch sözcüğünden hemen sonra gelen ifade parantez içinde yer almalı ve bir tamsayı ifade olmalıdır.
case anahtar sözcüklerini izleyen ifadeler tamsayı sabit türünde ifadeler olmalıdır, yani değişken içermemelidir.
switch deyiminin çalışma prensibi basittir. switch ifadesi hangi case’i izleyen sabitle çakışıyorsa, programın kontrolü o case’i izleyen kısma geçer. Bu case’den sonraki deyimler de kontrol edilmeden çalıştırılır.

case sabitlerinden hiçbiri ifade ile uyuşmuyorsa, programın akışı default‘u izleyen kısıma geçer. (Bu kısım mevcutsa) default‘un en sonda olması şart değildir. Fakat en sona koymak iyi bir programlama stilidir.

İki case sabiti aynı değeri alamaz.

Switch/case yapısında, programın kontrolünün ifadenin değerine göre case seçeneklerinden sadece birini çalıştırıp bundan sonra switch/case yapısını terketmesini isiyorsak bu durumda her case seçeneğinden sonra break komutu yerleştirmeliyiz.

nasıl kullanılır ? 

switch(secim koşulu) {
case durum1:
işlemler
break;
case durum2:
işlemler
break;
case ...
...
..
.
default
işlemler
break;
}

burda dikkat edilmesi gereken husus switch sonra () şeklinde parantezler gelmesi ve { şeklinde parantezin açılması ve durumların sonunda } şeklinde parantez ile kapatılmasıdır
ve başka husus ise case durumadı yazıldıktan sonra ; yerine : kullanılmasıdır yani noktalı virgül değil iki nokta kullanılmalıdır lakin break komutundan sonra ; noktalı virgül kullanılacaktır.

Java da Çok boyutlu Diziler

Çok boyutlu diziler içinde en yaygın kullanım alanı iki boyutlu diziler için söz konusudur.

Elimizde aşağıdaki gibi bir veri mevcut olsun:

1998 Yılı Otomobil Satışları

(Not: Tablodaki rakamlar gerçek değildir, örnek amaçlı verilmiştir.)

MARKA OCAK ŞUBAT MART
Fiat 700 600 650
Renault 900 800 700
VW 300 400 350
Opel 500 450 470
Ford 600 500 480


Bu tabloda, 1998 yılında çeşitli otomobil markaları için gerçekleştirilen ilk üç aylık satışları görüyoruz. Bu tür bir bilgiyi bilgisayara yükleyerek aşağıdaki sorulara cevap olabilecek işlemleri tablo üzerinde gerçekleştirmek isteyebiliriz:

Her marka için 3 aylık satış toplamı nedir? (Tablodaki satır toplamları)

Her ay için tüm markaların satış toplamları nelerdir? (Tabloda sütun toplamlarının hesaplanması)

Her marka için en çok satışın gerçekleştirildiği ay hangisidir? (Satırlardaki en büyük elemanların tespiti)

Her ay için en çok satışın gerçekleştirildiği marka hangisidir? (Sütunlardaki en büyük elemanların tespiti)

Tüm marka ve tüm aylar için otomobil satışları toplamı nedir? (Tablonun genel toplamının bulunması)



Tablodaki bilgileri Java dilinde, bilgisayar belleğinde iki boyutlu dizi (two dimensional array) yapısı adı verilen yapı içinde saklayabiliriz. Matematikteki matris yapılarının Java'daki doğal karşılığı da bu tip iki boyutlu dizi yapısıdır.

Yukarıdaki tablo içinde, sayısal olmayan bilgileri ve başlıkları ihmal ederek sadece satışlardan oluşan sayısal bilgiyi dikkate alırsak ve bu bilgiyi satis adlı bir tabloda saklarsak, aşağıdaki yapıyı elde ederiz:



satis

700 600 650
900 800 700
300 400 350
500 450 470
600 500 480


Java'da, 5 satır ve 3 sütundan oluşan bu tabloyu aşağıdaki şekilde tanımlayabiliriz:


int  satis=new int [5,3];
Burada satis adlı iki boyutlu dizinin bir elemanına referans vermek için program içinde, şeklinde bir ifade kullanırız. Burada satis dizinin adı, i satır indisi ve j de sütun indisidir.Satis dizisinin satır indisleri 0'dan başlar ve 4'e kadar devam eder. Sütun indisleri ise, 0 ile 2 arasında değerler alır. Aşağıda, satis dizisinin bellekte Java tarafından saklanan biçimini görüyoruz:

Buna göre, satis[0,0] elemanı 700, satis[2,1] elemanı 400 ve satis[4,2] elemanı ise 480’dir.
Satis adlı iki boyutlu dizinin eleman sayısı ise 5x3=15’tir.



İki boyutlu dizinin elemanlarını okutmak

İki boyutlu dizinin elemanlarını Java programının çalıştırılması sırasında klavyeden girmek için aşağıdaki gibi bir program kullanabiliriz. Aşağıdaki örnek programda 3 satır ve 2 sütunu olan satis adlı tablonun elemanları klavyeden giriliyor ve daha sonra tablo ekrana aktarılıyor. Şimdi bu örnek programı inceleyelim:


import java.util.Scanner;

public class CokBoyutluDizi1 {
    public static void main(String[] args){
        Scanner giris = new Scanner(System.in);
        int[][] satisTablosu = new int[3][2];
        int i, j;

        /* kullanıcıdan satış tablosu
         * bilgilerini alalım */
        System.out.print("Satis [0,0]=");
        satisTablosu[0][0] = giris.nextInt();
     
        System.out.print("Satis [0,1]=");
        satisTablosu[0][1] = giris.nextInt();
     
        System.out.print("Satis [1,0]=");
        satisTablosu[1][0] = giris.nextInt();
     
        System.out.print("Satis [1,1]=");
        satisTablosu[1][1] = giris.nextInt();
     
        System.out.print("Satis [2,0]=");
        satisTablosu[2][0] = giris.nextInt();
     
        System.out.print("Satis [2,1]=");
        satisTablosu[2][1] = giris.nextInt();

        /* bellekteki satis tablosu
         * elemanlarının ekrana yazdırılması */
        System.out.println("Satis tablonuz");
        for (i = 0; i <= 2; i++) {
            for (j = 0; j <= 1; j++) {
                System.out.print(satisTablosu[i][j] + " ");
            }
            System.out.println();
        }
    }
}


İki boyutlu dizi elemanlarına ilk değer atanması

İki boyutlu dizinin elemanları sabit olacaksa yani program her çalıştırıldığında değerleri değişmiyorsa, bu durumda iki boyutlu dizi elemanlarına programın içinde ilk değer ataması yapabiliriz

İlk değer ataması, iki boyutlu dizi değişebilecek olsa bile, dizi üzerinde gerçekleştirilecek tekrarlı bazı işlemler için de bir başlangıç değeri oluşturmak için gerekli olabilir. satisTablosu adlı dizinin elemanlarını kod bloku içinde ilk değer ataması yoluyla aşağıdaki gibi oluşturabiliriz:


int[][] satisTablosu = new int[][]{
                    {700,600,650},
                    {900,800,700},
                    {300,400,350},
                    {500,450,470},
                    {600,500,480}
                };



public class CokBoyutluDizi2 {
    public static void main(String[] args){
        int [][]satisTablosu = new int[][]{
                {700,600,650},
                {900,800,700},
                {300,400,350},
                {500,450,470},
                {600,500,480}};
        int i,j;

        /*bellekteki satis tablosu
         * elemanlarının ekrana yazdırılması*/
        System.out.println("Satis tablosu");
        for(i=0; i<=4; i++){
            for(j=0; j<=2; j++) {
                System.out.print(satisTablosu[i][j]+"  " );
            }
            System.out.println();
        }
    }
}


length fonksiyonunun kullanılması
length fonksiyonu ile iki boyutlu dizinin her bir boyutundaki eleman sayısını bulmamız mümkün.



satisTablosu adlı dizi yukardaki gibi tanımlanmışsa satisTablosu.length ifadesi 0. boyuta ait eleman sayısını yani satır sayısını (5), satisTablosu

.length ifadesiyse 1. boyuta ait eleman sayısını yani sütun sayısını (3) verecektir. Aşağıdaki Java kodu, bu fonksiyonların nasıl kullanılabileceğini gösteriyor:


public class CokBoyutluDizi3 {
    public static void main(String[] args){
        int [][]satisTablosu = new int[][]{
                {700,600,650},
                {900,800,700},
                {300,400,350},
                {500,450,470},
                {600,500,480}
        };
        int i,j;

        /*bellekteki satis tablosu
         * elemanlarının ekrana yazdırılması*/
        System.out.println("Satis tablosu");
        /*
         * döngülerin sınırlarını length()
         * fonksiyonlarıyla belirliyoruz
         * */
        for(i=0; i<satisTablosu.length; i++) {
            for(j=0; j<satisTablosu[0].length; j++) {
                System.out.print(satisTablosu[i][j]+"  " );
            }
            System.out.println();
        }
    }
}


ÖRNEK: Satış Tablosunun Satır ve Sütun Toplamlarının ve Tablodaki Elemanların Genel Toplamının Bulunması


public class CokBoyutluDizi4 {
    public static void main(String[] args){
        int [][]satisTablosu = new int[][]{
                {700,600,650},
                {900,800,700},
                {300,400,350},
                {500,450,470},
                {600,500,480}
        };
        int i, j, toplamSatis, toplamOtomobilSayisi=0;

        /*bellekteki satisTablosu dizisinin
         * elemanlarının ekrana yazdırılması*/
        System.out.println("Otomobil satislari tablosu");
        for(i=0; i<satisTablosu.length; i++) {
            for(j=0; j<satisTablosu[0].length; j++) {
                System.out.print(satisTablosu[i][j]+"  " );
            }
            System.out.println();
        }

        /*
         * Her marka için 3 aylık satış toplamlarını
         * yani dizinin satır toplamlarını yazdıralım
         * */
        for(i=0; i<=4; i++) {
            toplamSatis=0;

Java da Tek boyutlu diziler

Tüm programlama dillerinde olduğu gibi Java dilinde de dizi (array) yapısı son derecede önemli bir veri yapısıdır. Dizi yapısını kısaca tanımlarsak:

Dizi, bilgisayar belleğinde aynı isim altında genellikle aynı tipten çok sayıda veriyi bir arada saklayan veri yapısıdır. Aşağıda, x adlı bir dizinin mantıksal görünümü verilmiştir:

4 2    7 22 11 3
0 1 2 3 4 5
Dizinin bir adı ve dizi içerisindeki elemanın dizinin kaçıncı elemanı olduğunu belirten bir indisi (subscript, index) vardır. Örneğin, yukarıdaki x adlı dizi için x ifadesi bu dizinin 3 numaralı elemanını yani 22 değerini göstermektedir. Dizinin indisi Java dilinde daima köşeli parantez ile belirlenir:

Java dilinde bir dizinin ilk elemanının indisi daima 0’dır; son elemanın indisi ise diziye ayrılan yer sayısının 1 eksiğine eşittir. Yukardaki x dizisinin 6 elemanı vardır; ilk elemanının indisi 0 ve son elemanının indisi de 5’tir. Java Programı içinde Dizinin Bildirilmesi Bir Java programı içinde diziyi tanıtmak için, new sözcüğünü kullanarak belirli bir tipten yeni bir nesne tanımlama yolu izlenir. Dizinin tipi, adı ve maksimum eleman sayısı bir bildiri deyimi içinde belirtilir:


Tip DiziAdı[ ] = new Tip [ Eleman Sayısı ];
veya eşdeğeri


Tip [ ] DiziAdı = new Tip [ Eleman Sayısı ];
Örneğin, yukarıdaki x dizisi için,


int [ ] x= new int [6] ;
şeklinde bildirimde bulunulacaktır. x dizisi 6 elemanlıdır ve elemanları int türündedir.



Dizi için ne gereklidir?
Dizi yapısına, aynı türden bir veri grubunu tümüyle bellekte saklı tutmanın gerekli olduğu uygulamalarda ihtiyaç duyarız. Örneğin, verilerin sıralanması, bir veri grubuna ait bazı istatistiksel bilgilerin hesaplanması (standart sapma vb.) gibi uygulamalar bu tür uygulamalardandır.

Örnek: Aşağıda aynı işlemi gerçekleştiren iki farklı Java programı verilmiştir. Her iki program da, bilgisayara girilen 5 adet sayının toplamını bulmaktadır.

Java da döngüler

Yazilan programlarda bazen belli komut parçalarinin birçok kez çalismasi gerekebilir. Yani bazi komut parçalarinin, belli sartlar altinda tekrar tekrar islenmesi gerekebilir. Döngü deyimleri, bahsedilen komut parçalarinin belirtilen sartlar gerçeklestikçe tekrar tekrar islenmesini saglar.

Java’da üç tür döngü vardir. Bunlar çogu programlama dilinde olan; “for”, “do-while” ve “while” döngüleridir. Bu döngülerden for ve while döngüsünde, kosul sinamasi döngüye girmeden önce yapilirken, do-while döngüsünde kosul sinamasi bir kod parçasi çalistiktan sonra yapilir.


 for döngüsü

yapisi su sekildedir:

for ( 1. deger (baslangiç degeri-initialization) ; 2.deger (kosul kontrolü) ; 3.deger (islemler) )
{
. . . . . . . .   // sarta bagli tekrarlanmasini istedigimiz kodlar
. . . . . . . .
}

“for” döngüsü görüldügü gibi üç parçadan olusur. Her parça birbirinden ile ayrilir. Ilk parça, baslangiç degeri (initialization) dir. Burada bulunan islemler, döngü baslamadan önce ve bir kere islenir. Bu 1. degere birden fazla islem yazilabilir, bunlari da birbirinden ',' virgül ile ayirmak gerekir. Ancak bu islemleri az tutmanizi tavsiye ederim.

Ikinci parçada, kosul kontrolü yapilir. for döngüsünün her tekrarinda kontrol edilmesi gereken kodu bu kisima yazmak gerekir. Bu kod dogru oldugu surece, döngü devam eder, eger kosul saglanmiyorsa döngüden çikilir.

Üçüncü parçada yer alan kodlar ise; yine döngünün her turunda, süslü parantezin içindeki kodlar gibi çalisir. Tek fark, üçüncü parçadaki kodlarin baslangici, döngünün içinde yer alan kod parçalarinin çalismasindan sonra olur.

Basit bir örnek vermek gerekirse;

for(int deger=5;deger<10;deger++){
     System.out.println(deger);
}

Yukaridaki for döngüsünde ilk parçada deger=5 diyerek, degerimizin ilk degerini atamis olduk. Ikinci parça olan deger<10, kosul kismimiz. Döngü her döndügünde “deger” in 10 dan küçük olup olmadigina bakacak. “deger” 10’a esit ya da 10’dan büyük oldugu anda döngü sonlanir. Üçüncü parça olan deger++ kismi ise, System.out.println(deger); çalistiktan sonra döngü döndükçe “deger”in bir artacagini gösteriyor. Sonuç olarak bu kod parçasi ekrana alt alta 5 ten 10 a kadar tüm sayilari yazar. 10 hariçtir. Çünkü deger 9 olarak basildiktan sonra deger++ çalisir. “deger” in degeri 1 artip 10 olur ve döngü kontrolüne girdiginde deger<10 sartini saglamadigi için döngü sonlanir.


While Ve Do-While Döngüsü

Öncelikle while döngüsünden bahsetmek istiyorum. Zaten iki döngüde birbirine çok benzer çok az farklari var. while döngüsünde, while komutu içerisindeki ifade “true” degerini aldigi müddetçe while döngüsünün blogu içerisindeki kod parçalari islenir. Eger while komutu içerisindeki deger “false” degerini alirsa, döngü blogunun çalismasi sonlanir.

while döngüsünün yapisi su sekildedir.

while(expression-ifade){
. . .
}

Tüm döngülerin mantigi aynidir. Herhangi bir döngüyü anlamaniz, diger döngüleri de rahatlikla anlayabileceginiz anlamina gelir. Sik sik kod yazarak, alistirma yaparak bu konuyu pekistirebilirsiniz.

do-while döngüsü ise while döngüsüne çok benzer. while döngüsünden farki; do-while döngüsü kosul çalistirilmadan önce kod blogu bir defa çalisir ve sonra kosula girer. Yani kosul dogru olsa da olmasa da kod blogu bir defa çalismis olur. Bu fark aslinda önemli bir farktir.

do{
. . . . //kod blogu
. . . .
}while(expression-ifade);

Java da klavyeden değer almak

1) İlk olarak Scanner sınıfını programımıza dahil etmemiz lazım. Bunun için “public class isim{”  yazan yerin üstüne  import java.util.Scanner; yada import java.util.*;  yazarızBunun anlamı klavyeden değer girmemiz için Scanner sınıfını dahil etmek. . * bunun anlamı ise util kutuphanesindeki Scanner sınıfı dahil util içinde yer alan tüm sınıfları çağırmasıdır.

2)  Daha sonra Scanner sınıfını kullanmak için, işlem kodlarından  Scanner klavye=new Scanner(System.in);  yazmamız gerek.  Buradaki “klavye”  veya  "k"benim tercih ettiğim isim, siz istediğinizi yazabilirsiniz.

3) Ardından belirlediğimiz bir veri tipine göre klavyeden değer alıyoruz. int ve string veri tiplerine göre klavyeden değer alma kodları gösteriliyor.
veritipi veriadı=klavye.next();

1)veri tipine int string long gibi veri türlerini yazarız
2)veriadına isim verme kurallarına uyduğumuz sürece istedimizi yazarız
3)mesela kullanıcının sayı girmesini istiyorsak sayi yazabiliriz
4)= ise veriadına değer atamak için kullanırız
5) atama işaretinden sonra yukarıda tanımladığımız scanner sınıfına ne isim verdiysek onu yazarız ben klavye tanımladığım için klavye yazmak  zorundayım
6) klavye yazdıktan sonra .(nokta) isaretine basarız ve ekranda yanına gelen seçeneklerden uygun olanı seçeriz
int için nextInt();
string için next(); tek bir kelime için
                 nextLine(); birçok kelime için
diğer veri türleri için de nextveritipi(); şeklindedir yani double için nextDouble();

örnek:

import java.util.*;
public class Ornekler {
    public static void main(String[] args) {
        Scanner k=new Scanner(System.in);
        String a=k.nextLine();
        System.out.println(a);
        }
    }
çıktı:bir cümle giriniz
harun aygun
girdiğiniz cümle: harun aygun