Herkese Merhabalar,
Java’ya devam ediyoruz.
5)Döngüler
Java’da tekrarlı işlerimiz için kullanabileceğimiz 4 adet döngü bulunmakta.
- while
- do – while
- for
- foreach
5.1) While Döngüsü : Bir koşulun gerçekleşmesi durumunda belirli işlemlerin tekrarlanması söz konusu ise while döngülerinden yararlanılır. Döngünün çalışması için koşulun başlangıçta mutlaka doğru olması gerekir.
int a = 1; // int türünde bir değişken oluşturduk ve 1 değerini atadık while (a<10) { //Burada koşulumuzu belirtiyoruz. //a değişkeni 10'dan küçük olduğu sürece çalış System.out.println(a); //a değişkenimizi konsola yazdırıyoruz. a++; // Sonsuz döngüye girmemesi için değişkenimi her adımda 1 artırıyorum }
Uygulamamızı çalıştırdığımızda 1’den 9’a kadar sayıları konsola yazacak.
5.2) Do – While Döngüsü : While ile aynı işi yapar fakat burada döngümüz kesin olarak bir kere çalışır. Öncelikle döngümüzün içine girer bir kere çalışır, daha sonra koşulu kontrol eder.
int a = 1; do{ System.out.println(a); a++; }while (a<10);
Uygulamamızı çalıştırdığımızda 1’den 9’a kadar sayıları konsola yazacak.
5.3)For Döngüsü : Belirli sayıda tekrarı çalıştırmak istediğimiz zaman kullanırız. Bir başlangıç, bir bitiş değeri veririz ve sayacın kaçar kaçar azalacağı veya artacağını belirtiriz.
for (int i = 0; i < 10; i++) { // Programlama dillerinde genel yazım şekli olarak for döngüsünde // bir i değişkeni oluşturulur ve kontrol bu değişken üzerinden yapılır //Burada döngümüz 0'dan başlar, i++ olduğu için her adımda i<10 şartına bakarak ilerler //i değişkeni 10 olduğu zaman döngüden çıkar System.out.println(i); }
Uygulamamız çalışınca konsola 0’dan 9’a kadar olan sayıları yazacak.
Döngümüzde “i++” bölümünü değiştirerek sayıları küçükten büyüğe, ikişer ikişer artarak vb şekilde yazdırabiliriz.
Bunun için ufak bir faktöriyel alma uygulaması yazalım. Basit olması açısından sabit bir sayı kullanacağım. İsterseniz sayıyı kullanıcıdan da alabilirsiniz.
int faktoriyelAlinacakSayi = 5, sonuc = 1; // sonuc değşkeni 0 olursa sonuc çarpma işleminden // dolayı hep sıfır çıkar for (int i = faktoriyelAlinacakSayi ; i > 0; i--) { // Dikkat etmemiz gereken şey i > 0 yazmamız. Uygulamamız büyükten küçüğe doğru //gideceği için bu şekilde kontrol etmemiz gerekiyor. //Bir diğer konu i-- yazmamız. Burada da i'nin birer birer azalmasını sağlıyoruz. sonuc *= i; // Bu ifade "sonuc = sonuc * i" ile aynı anlama geliyor. // Her adımda sonucu i ile çarpıyoruz. } System.out.println(sonuc); // en son sonucu konsola yazdırıyoruz.
Sonuç olarak konsola 120 yazacak.
5.4)Foreach Döngüsü : Kaç kere tekrar edilmesi gerektiğini bilmediğimiz tekrarlı durumlarda kullanırız. Elimizde bir liste olsun. Listeyi daha sonra anlatacağım fakat ön bilgi olması açısından gerçek hayattaki gibi normal bir liste düşünebilirsiniz. Örneğin marketten alınacaklar listemiz olsun.
Listenin içerisinde kaç adet ürün olduğunu bilmediğimizi varsayıyorum. Bu durumda foreach döngüsü kullanarak ürün sayısı kadar döngünün çalışmasını sağlayabiliriz.
List<String> alinacaklar = new ArrayList<String>(); //Liste bu şekilde oluşturuluyor. //String elemanlar bulunduran bir liste oluşturduk. alinacaklar.add("Çikolata"); //Listeye eleman ekleme işlemi alinacaklar.add("Şampuan"); alinacaklar.add("Ekmek"); for (String alinacakUrun : alinacaklar) { //Yine for yazılır fakat foreach olarak bilinir. //Burada alinacaklar listesi içinde bulunan String elemanlar kendi belirlediğimiz ve adını //alinacakUrun olarak koyduğumuz bir geçici değişkene atanıyor. Döngü içinde bu değişken ile //işlemlerimizi yapıyoruz. Döngü eleman sayısı kadar tekrar eder. Eleman kalmadığında döngü biter. System.out.println(alinacakUrun); // Konsola yazdırıyoruz. }
Uygulamamızı çalıştırdığımızda konsola şunu yazar :
Çikolata Şampuan Ekmek
Döngüde string yerine int yazarsak liste içindeki int elemanları alıp değişkene atar. String yerine oluşturduğumuz Liste’ye göre istediğimiz tipi yazabiliriz.
6)Diziler
İçerisinde birden fazla aynı tip ve isimdeki veriyi depolayabilen değişkenlere dizi denir. Diziler de tıpkı int, string vb tiplerdeki gibi bellekte depolanır uygulama kapatılınca silinir.
Bir dizi çok sayıda değişken barındırır. Bu değişkenleri birbirinden ayırabilmek için indis bilgisi kullanılır. Javada başlangıç indisi 0’dır. Yani dizinin ilk elemanına 0 indisi ile ulaşırız.
Şimdi Java’da dizi nasıl tanımlanır ona bakalım.
int[] dizi = new int[10]; //int tipinde, içinde 10 adet değişken bulundurabilen bir dizi oluşturmuş olduk.
Oluşturduğumuz dizinin şu an içi boş. İçerisine bir şeyler ekleyelim.
dizi[0] = 22; //dizinin 0. indisine 22 atıyoruz. Bu aynı zamanda dizinin ilk elemanıdır. dizi[3] = 33; //Dizinin ara elemanlarına değer atamak zorunda değiliz. // Aradan istediğimiz yere değer ataması yapabiliriz.
Dizinin içerisindeki elemanları listelemek için şimdi de bir for döngüsü yazalım.
for (int i = 0; i < dizi.length; i++) { //dizi.length dizinin uzunluğunu veriyor. Burada uzunluğumuz 10. //Yani aslında orada i < 10 yazıyor gibi çalışıyor. System.out.println(dizi[i]); // dizi elemanında indis değeri ile ulaşıyor ve konsola yazıyoruz. }
Uygulamamızın çıktısı şu şekilde olacak.
22 0 0 33 0 0 0 0 0 0
0. ve 3. indislere değer ataması yapmıştık. Diğerleri boştu fakat Java’da varsayılan olarak 0 oluyor.String dizilerde de varsayılan olarak null atanır.
Dizilere ilk oluşturma aşamasında değer atamak da mümkün.
int[] dizi = {1, 2, 3, 4, 5}; // 5 boyutlu ve ilk değerleri atanmış bir dizi oluşturmuş olduk.
7)Listeler
Tıpkı diziler gibi içerisinde veri depolayan bir yapıdır. Diziden farkı dinamik olmasıdır. Diziler oluşturulurken bir boyut verilir ve değişmez. Eğer dizimiz bir müddet sonra yetersiz kalırsa daha büyük boyutta yeni bir dizi oluşturmalı, içeriği yeni diziye kopyalamalı ve yeni diziyi kullanmaya başlamalıyız.
Elinizdeki verilerin belirlediğiniz boyuttan fazla olmayacağını biliyorsanız dizi kullanabilirsiniz fakat eğer aklınızda dizinin boyutunu çok yüksek yapmak varsa bu düşünceden vazgeçmelisiniz çünkü böyle bir durumda uygulamamız bellekte çok fazla yer kaplar . Onun yerine List veya ArrayList denilen yapıyı kullanabiliriz.
Bu yapılar içerisine eklediğimiz veriye göre boyutunu artırıp azaltır. Bu sayede hem bize esneklik sağlar hem bellekte daha az yer kaplar.
List’lere, dizilerdeki gibi indislerle erişebilir ve değer atamaları yapabiliriz.
Yukarıda Foreach döngüsünü anlatırken bir Liste oluşturmuştuk. Şimdi tekrar oluşturalım.
List<String> alinacaklar = new ArrayList<String>(); //String veri tipinde veri depolayan bir List oluşturduk.
List’ler ile işlem yapmamız için Java bize bazı methodlar sağlıyor.
- add (E e): Bir objeyi listeye ekler.
- add (int index, E e): Bir objeyi listede istenen dizine (index) ekler.
- clear: Bütün elemanları siler.
- contains: Bir objenin dizi içerisinde olup olmadığını kontrol eder.
- get (int index): Dizi içerisinde belirli bir dizindeki objeyi verir.
- remove (E e): Belli bir objeyi siler.
- remove (int i): Belli bir dizindeki objeyi siler ve dizini günceller.
- size: O anda dizide kaç adet eleman olduğunu söyler (add metodu ile eklenmiş).
- subList (int from, int to): İki dizin arasındaki elemanlardan yeni bir dizi oluşturur.
- set (int index, E element): Belli bir dizindeki objeyi yenisiyle değiştirir.
List’imize bir kaç veri ekleyelim.
alinacaklar.add("Çikolata"); alinacaklar.add("Şampuan"); alinacaklar.add("Ekmek");
List’imiz içerisindeki verileri yazdırmak için bir foreach döngüsü yazalım.
for (String alinacakUrun : alinacaklar) { System.out.println(alinacakUrun); }
Uygulamamızın çıktısı şu şekilde olacak.
Çikolata Şampuan Ekmek
Şimdi de istediğimiz indise bir ürün ekleyelim.
alinacaklar.add(1, "eklenenUrun"); // 1. indise "eklenenUrun" verisini ekliyoruz
Ürünleri tekrar listelediğimizde sonuç şu şekilde oluyor.
Çikolata eklenenUrun Şampuan Ekmek
Bildiğiniz gibi ilk indis 0’dır. Bu nedenle Çikolatanın altına ekledi.
Son olarak bir de silme işlemi yapalım.
alinacaklar.remove("Ekmek"); // Ekmek verisini listeden siliyor alinacaklar.remove(0); // ilk indisteki Çikolata verisini listeden siliyor.
Bu çıkarma işlemlerinden sonra listemizde sadece ilk eklediğimiz “eklenenUrun” ve “Şampuan” kalmış oluyor.
Biraz uzun bir yazı oldu. Sabırla okuduğunuz için teşekkür ederim. Elimden geldiğince yazılara devam etmeye çalışacağım. Beğenmediğiniz, şurası böyle olsa daha güzel olurdu dediğiniz yerleri bana iletirseniz çok mutlu olurum.
Görüşmek üzere.