Press "Enter" to skip to content

Java – Dizilere Giriş

Bu yazıda Java dilinde dizi kavramını ele alacağız ve temel kavramları öğreneceğiz. Diziler (array), aynı türdeki değerlerin bir arada tutulmasını sağlayan ve sabit büyüklüğe sahip nesnelerdir. Bunu açacak olursak:

  • Bir dizi aynı türden nesneleri tutmak zorundadır. Burada tür, int, boolean gibi temel (primitive) türler olabileceği gibi nesne referansları da olabilir.
  • Dizi yaratıldıktan sonra boyutu değişmez. Sabittir, ne uzar ne kısalır.

Dizi Tanımlama

Diyelim ki 10 öğrencili bir sınıfa sınav yaptınız ve verdiğiniz notları bir dizide tutmak istiyorsunuz. Notları tamsayı cinsinden verdiğinizi düşünürsek, 10 elemanlı bir int dizisi işinizi görecektir.

int[] notlar;

Yukarıdaki satır notlar isminde int türünden bir dizi referansını tanımlamaktadır. Normal bir int değişkeninden tek farkı diziyi temsil eden köşeli parantezdir. Ancak ortada henüz bir dizi yok, sadece referansı tanımladık. Diziler nesne olduklarından new anahtar kelimesi ile yaratılırlar.

int[] notlar = new int[10];

Yukarıdaki satır ise eşitliğin sağ tarafında 10 elemanlı bir int dizisi yaratmakta ve notlar isimli dizi referansına atama yapmaktadır. Diziler sabit büyüklükte oldukları için, yaratırken kaç elemanlı olduğu bilgisini vermemiz gerekmektedir. Eğer aşağıdaki gibi boyut belirtmeden bir tanımlama yaparsanız derleyici hata verecektir:

int[] notlar = new int[];   // derleme hatası, boyut belirtilmemiş

Java’da herhangi bir türden dizi yaratmak mümkündür. Aşağıdaki örnekleri inceleyebilirsiniz:

String[] stringDizisi = new String[4];
boolean[] booleanDizisi = new boolean[100];
Ogrenci[] ogrenciDizisi = new Ogrenci[10];

Dizi Elemanlarının İlk Değerleri

Peki böyle bir dizi yarattığımızda içindeki elemanların değerleri ne olacaktır? Temel (primitive) bir tür olan int kullandığımız için ilk değerler 0 olacaktır. Diğer temel türler için de bu durum geçerlidir. Örneğin boolean türünde bir dizi tanımlarsanız ilk değerler false, double türünde tanımlarsanız 0.0 olacaktır. Nesne türleri kullanıyorsanız bütün ilk değerler null olacaktır.

Dizi Elemanlarına Erişim

Şimdi bu dizinin elemanlarına nasıl atama yapıyoruz ona bakalım.

notlar[0] = 61;
notlar[1] = 94;
notlar[2] = 35;
notlar[3] = 80;
notlar[4] = 76;
notlar[5] = 54;
notlar[6] = 67;
notlar[7] = 79;
notlar[8] = 92;
notlar[9] = 46;

Yukarıda 10 elemanlı dizinin her elemanına bir atama yaptık. Dizinin kaçıncı elemanına atama yaptığımızı köşeli parantez içinde belirtiyoruz. Buna indis (index) denmektedir. Dikkat ederseniz indis değeri 1 değil 0’dan başlamaktadır. Yani dizinin ilk elemanını 0 indisi ile temsil ediyoruz.

Dizi elemanlarına erişmek istersek de aynı yöntemi kullanıyoruz:

int not = notlar[0];

Burada int türündeki not değişkeni dizinin 0. indisteki elemanı olan 61 değerini alacaktır.

Dizilerin Uzunluğu

Daha önce belirttiğim gibi diziler yaratıldıktan sonra boyutları değiştirilemez, ancak bir dizinin uzunluğunu kontrol edebiliriz:

String[] array = new String[5];
int arrayLength = array.length;  

Her dizi değişkeninin uzunluğu tutan bir length alanı vardır. Yukarıdaki örnekte arrayLength değişkeni 5 değerine sahip olacaktır.

Dizi Elemanlarını Tarama

Aşağıdaki gibi bir for döngüsü kullanarak dizinin tüm elemanlarını tarayabiliriz:

int[] intArray = new int[10];

for(int i=0; i < intArray.length; i++) {
    intArray[i] = i * 2;
}

for(int i=0; i < intArray.length; i++) {
    System.out.println( intArray[i] );
}

Burada önce 10 elemanlı bir int dizisi tanımladık. Sonra for döngüsü içinde indisi temsil eden ve ilk değeri 0 olan i değişkenini tanımladık. Her döngüde dizi elemanına indis değerini ikiyle çarpıp değer ataması yaptık. İkinci for döngüsünde ise yine indis değişkenini kullanarak bütün elemanları sırayla ekrana yazdırdık.

Dizi elemanlarını taramak için kullanabileceğimiz diğer bir yöntem ise for-each döngüsüdür.

for(int value : intArray) {
    System.out.println( value );
}

Bu döngü kodu daha temiz ve anlaşılır. Ancak iki dezavantajı var:

  • Elemanları sadece okumaya izin verir, yazma yapamayız.
  • Elemanların indis bilgisini göremeyiz.

Bunlar sizin için gerekli değilse for-each döngüsü kullanmak daha iyi olacaktır. Yukarıdaki örnekte elemanların değerlerini indislerinden bağımsız olarak okuyup ekrana yazdırdığımız için for-each döngüsü daha mantıklıdır.

Tek Satırda Dizi Tanımlama ve Atama Yapma

Bir diziyi tanımlarken elemanların değerini de biliyorsanız, tanımlama ve atamayı tek satırda yapabilirsiniz. Örneğin, yazının başında gördüğümüz ve not değerlerini tutan int dizisini bu şekilde tanımlayalım:

int[] notlar = { 61, 94, 35, 80, 76, 54, 67, 79, 92, 46 };

Gördüğünüz gibi tanımlama ve değer atamalarını tek satırda hallettik. new anahtar kelimesine ve dizi boyutunu belirtmemize gerek kalmadı çünkü eleman sayısı zaten yaptığımız atamalardan belli oluyor. String türünden bir dizimiz olsaydı aşağıdaki gibi yazabilirdik:

 String[] strings = {"monday", "tuesday", "wednesday"};

ArrayOutOfBoundsException

Dizilerin boyutlarının sabit olduğunu artık biliyoruz. Dizi elamanlarına erişirken indis değerinde bir hata yaparsanız ArrayOutOfBoundsException hatası ile karşılaşırsınız.

int[] intArray = new int[]{ 1, 2, 3 };
System.out.println(intArray[3]); 

Yukarıdaki örnekte 3 elemanları bir dizimiz var ve 3. indisteki elemanı okumaya çalışıyoruz. Bu yanlıştır çünkü 3 elemanlı bir dizinin indis değerleri 0, 1 veya 2 olabilir. Dizi sınırlarının dışına çıktığımız için aşağıdaki gibi bir hata alırız:

Index 3 out of bounds for length 3
java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3

Daha sonraki yazılarda dizilerle ilgili daha ileri konuları inceleyeceğiz.

Share

Leave a Reply

%d bloggers like this: