ana sayfa : araştırma : java uygulamaları : diziler [ 5 / 12 ]

GERİ

5  DİZİLER

 

İnt[] dizi = new int[10];

New kullanılarak bir dizi oluşturulduğunda bütün sayısal diziler için 0 bütün bool değerler için false başlangıç değeri olarak atanır. \0 değeri de bütün karakter değerleri için atamnır. İstenildiğinde dizi oluşturma ve ilk değer atama aynı anda yapılabilir. Bu durumda [] yerine değerler birbirinden , ile ayrılarak girilir.

String [] isim = {“ahmet”, “mehmet”};

 

Girilen her bir eleman hem birbirleriyle hem de değişkenle aynı tipte olmak zorundadır. Girilen eleman sayısına denk büyüklükte dizi otomatik olarak oluşturulur.

 

Başlangıç değerleri girildikten sonra izlerin değerlerini test edebilir ve değiştirebiliriz. Dizi içerisindeki bhir değere ulaşmak için subscript komutu kullanılır.

 

Dizim[subscript];

 

Bu ifadedeki dizim kısmı nesneyi çağıran değişkendir. Subscript veya alt indis ise dizi içindeki ulaşılmak istenen elemanı gösterir. C veya C++’da olduğu gibi numaralandırma 0’dan başlar. On elemanlı bir dizide numaralandırma 0-9 arasındadır.

 

Bütün alt indisler sınırlar arasında olmalıdır. Aksi halde derleme sırasında hata oluşur. Aşağıdaki örneği inceleyelim.

 

String[]dizi=new String[10];

Dizi[10]0”salata”

 

Son satırda program hata verir.çünkü 10 elemanlı bir dizide eleman numaraları 0-9 arasında değişir.

 

Alt indisler eğer koşma zamanında hesaplanır ve sınırların dışına taşarsa Java yorumlayıcısı da hata verir. Taşmayı önlemek veya herhangi bir dizinin uzunluğu öğrenilmek istenirse length kullanılır.

 

İntDiziminBoyu=dizi.length

 

 

5.1 Dizi Elemanlarını Değiştirme

 

Belli bir dizi elemanınan bir değer atamak için = operatörü kullanılır. Aşağıdaki örneği inceleyelim.

 

            Dizi[1]=15;

Hatırlanması gereken önemli bir nokta da Java’da nesne dizilerinin bu nesnelere refere eden diziler olduğudur. Bu durum C’deki pointer dizileri ile benzerdir. Dizideki bir elemana değer atandığında bu nesneye bir referans oluşturur. Dizi içindeki elemanların yerleri değiştirildiğinde referansların yerleri de değişir.dolayısıyla değişkenlerden oluşan diziler de değerler elemandan elemana kopyalanır.

 

Nesne referanslarından oluşan diziler sadece nesnenin kendisini içeren dizilere göre daha kullanışlıdırlar. Bu tür dizilerde aynı nesneye birden fazla referansla hem dizi içinden hem de dışından ulaşılabilir.

 

5.2 Çok Boyutlu Diziler

 

Java çok boyutlu dizileri desteklemez. Fakat dizi içinde dizi tanımlanarak bu sorun halledilebilir.

 

İnt ikiboyut[][]=new int[10][10];

İkiboyut[0][0] =1;

İkiboyut[0][1] =2;

 

5.3 Blok İfadeleri

 

Bloklar { } karakterleri ile sınırlandırılmış komutlardır. Bloklar tek bir komutun konulabileceği her yere konur. Aynı zamanda bloklar içinde lokal değişken tanımlanabilir ve kullanılabilir.blok bittiğinde ise bu değişkenlerde etkisiz hale gelirler.

 

Aşağıdaki blokta y lokal değişkeni tanımlanmıştır. Blok bittiğinde y lokal değişkenini blok içinde tanımlandığı gibi kullanmak mümkün değildir.

 

Void testblock() {

İnt x=13;

{ // blok başlangıcı

int y=7;

system.out.println (“blok içi:”);

system.out.println (“x:” +x);

system.out.println (“y:” +y);

} // blok sonu

}

 

bloklar bu şekilde normal olarak kullanılmazlar.bloklar sınıflar ve metodların içinde olurlar. Fakat blokların diğer bir kullanım yeri de kontrol amacıyla kullanılan yapılardır.

 

5.3.1 İf şartı

 

Java’daki if kullanımı ile C’deki kullanım birbirine yaklaşık olarak denktir. İf şartı if kelimesinin ardında lojişk bir ifade ve en arkada da true durumunda çalıştırılacak program kodlarını içerir.

 

İf (a>b)

System.out.println(“a,b den büyüktür.”);

 

İsteğe bağlı olarak şart gerçeklenmemişse işlenecek kodu belirtmek için else kullanılabilir.

 

İf (a>b)

System.out.println(“a,b den büyüktür.”);

Else System.out.println(“b,a den büyüktür.”);

 

Java ve C’deki if deyimleri arasındaki fark C de geri dönüş değeri olarak integer kullanılırken Java’da bool değeri kullanılmasıdır.

 

Class iftesti;

    Public static void main (String args[]) {

       İnt a=10, b=15;

            İf (a>b) System.out.println(“a,b den büyüktür.”);

    Else           System.out.println(“b.a dan büyüktür.”);

}

}  

5.3.2 Şart operatörü

 

İf ve else komutlarına alternatif bir yol da şart operatörüdür. Bazen literatür de üç operand içermesinden dolayı üçlü operatör olarak ta adlandırılır.

 

Şart operatörü, if komutunun aksine geriye değer döndürür. Çok kısa kontrollerde aşağıdaki gibi kullanılır.

 

Test ? doğru : yanlış

 

Test sonucunda true veya falsa lojik sonuçlarına bağlı olarak birinci veya ikinci değişkenine a veya b den küçük olan hangisi ise o atanır.

 

İnt küçük = a<b ? a : b;

 

Şart operatörü öncelik sıralamasında oldukça aşağıdadır. Genel olarak bütün alt ifadeler sonuçlandıktan sonra şart operatörü değerlendirmeye alınır.

 

5.3.3 Switch operatörü

 

Bir programlama dilinde en çok yapılan şey bir değişkenin değerini bir sabitle veya başka bir değişkeninki ile karşılaştırmaktır. Eğer ikisi arasında uyum yoksa başka birisininki ile karşılaştırmanın yapılarak ilgili yere dallanması ile sık sık karşılaşılır. Aşağıdaki örnekte benzer bir durum görülmektedir.

 

İf (op= = ‘+’)

            Topla(arg1,arg2);

Else if(op= = ‘-’);

            Fark(arg1,arg2);

Else if(op = =’*’)

            Carp(arg1, arg2);

Else if(‘/’)

            Bol(arg1,arg2);

 

Bu şekilde içiçe if döngüsüyle test yapılabileceği gibi şu yapıda kullanılabilir.

Sitch (test) {

Case durum1:

Sonuç1;

Break

Case durum2:

Sonuç2;

Break

...

default:defaultsonuç;

}

 

Switch ifadesinde test kısmı her bir durumla ilgili değerlerle karşılaştırılır. Uygunluk varsa hemen sonraki komut işleme konur. Hiç biriyle uygunluk sağlanmazsa default ifadesinden sonraki komutlar işleme konulur,  default isteğe bağlıdır. Hiçbir uyum yoksa ve default da bulunmuyorsa bu blok işlem yapılmadan biter.

 

Java’da dikkat edilmesi gereken nokta switch ile sadece basit temel tipler bile, test kısmında bulunamazlar (float ve long). String bile test içinde bulunamaz. Bu switch ifadesinin kullanımını önemli ölçüde sınırlar. IF durumunda ise hiçbir sınırlama yoktur.

Daha önceki if örneğini uyarlarsak aşağıdaki program parçasını elde ederiz.

Switch (oper) {

Case ‘+’

Topla(arg1,arg2);

Break;

Case ‘*’

carp(arg1,arg2);

Break;

Case ‘-’

fark(arg1,arg2);

Break;

Case ‘/’

Bol(arg1,arg2); break}

 

Her bir şartın arkasından break konmuştur. Eğer break ifadesi konmasaydı uygunluk durumundan sonra bir aşağıdaki komuttan başlayarak blok sonuna kadar komutlar uygulanırdı. Gerçi bazı durumlarda bu istenir fakat çoğu kez bu durum istenmez.

 

Güzel bir kullanımda birden fazla değerin aynı ifadeye dallanması istendiğinde ortaya çıkar. Bu uygulamada çok sayıda case satırı araya sonuç konmadan ardarda eklenir. Şartlardan herhangi birisi uyarsa hemen bunların altındaki komut çalıştırılır. Örneğin 1-9 arasındaki sayıların tekliğini çiftliğini araştıran program aşağıdaki gibi yazılabilir.

Switch(x) {

Case 2;

Case 4;

Case 6;

Case 8;

System.out.println(“x çift”);

Break;

Default : System.out.println(x tek);

}

 

 

 

 

5.3.4 For döngüleri

 

For döngüsü C’de olduğu gibi koşul uygun olduğu müddetçe tekrarlanan komutlar için kullanılır. Java’daki for yapısı kabaca şu şekildedir.

For başlangıç değeri, üst değer, artım){

Komutlar; (

}

 

·         Başlangıç değeri: Bu sayede döngünün başlama değeri yüklenir. Döngü indisi  varsa onun yardımıyla deklarasyon ve değer ataması yapılabilir.

·         (örneğin int i=0)

Döngünün bu kısmında tanımlanan değişkenler lokaldir. Döngü bittiğinde bu değişkenlerde silinirler.

·         Üst değer : Üst değer döngünün sonunda kontrol edilen kısımdır. Test lojik ifade olmalıdır.  Geri dönüş değeri de dolayısıyla true veya false olur (i>10 gibi). Sonuç true ise döngü devam eder. Aksi halde döngüden çıkılır.

·         Artım : Artırma ya bir ifade ya da fonksiyon çağırma olabilir. Tipik olarak  döngü indisinin değerini değiştirme için kullanılır.

·         Komutlar ise döngü içinde kalındıkça çalıştırılan komutlardır. Komutların içinde boş ifadelerde olabilir. Yani hiçbir ifade kullanılmadan ; karakteri konulabilir. Eğer döngü parametrelerinde; kullanılırsa ilgili parametreye programın başka bir yerinde değer ataması yapılmalıdır.(Grup Java,2000)

 

5.3.5 While ve do döngüleri

 

While ve Do döngüleri de for döngüleri gibi belli bir komut bloğunun şarta bağlı olarak çalıştırılmasını sağlar. Bu döngülerden hangisinin kullanılacağı programcının stiline bağlıdır. While ve Do döngüleri C’de ki ile aynı işi yaparlar. Aralarındaki tek fark Java’da test sonucun true veya false olmasıdır.

 

5.3.6 While

 

Belli bir şartın, true olduğu müddetçe belli bir komut bloğunu çalıştırmasını sağlar.

While(şart) {

Gövde;

}

Şart bir lojik ifadedir. True sonucu elde edilirse while döngüsü gövdede bulunan komutları çalıştırır. Her sefer döngü test edilir. Sonuç false oluncaya kadar gövdede bulunan komutlar çalıştırılır. Aşağıdaki örnekte dizi2’ye dizi1’de ki değerler float tipine çevrilip kopyalanmaktadır. Döngüden dizi1’deki elemanların birisinin 0 olması veya indisin birinci dizinin elemen sayısından fazla olması durumunda çıkılmaktadır.

 

İnt count = 0;

While (count < dizi1.length && dizi1[count] !0) {

Dizi2[count]=(float)dizi[count++];

}

 

Dikkat edilmesi gereken nokta eğer şart başlangıçta false değerini alıyorsa komutların bulunduğu gövde hiç işlemeden devam edilir.döngünün en az bir kez işletilmesi için aşağıdaki yöntemlerden birisi kullanılır.

 

  • Döngü gövdesi döngü dışında kopyalanabilir.
  • Do döngüsü kullanılabilir.

 

Bu iki seçenekten genelde do tercih edilir.

 

5.3.7 Do...While döngüsü

 

Do döngüsü whilw döngüsü ile tamamen aynıdır. Aralarındaki tek fark do döngüsü komut bloğunu test sonucu false oluncaya kadar işletir. While testi komut bloğunu işletmeden önce yaparken do...whiile testi çalıştırmadan yapar. Böylelikle döngünün en az bir kez çalıştırılması sağlanır. Test döngü çalıştırıldıktan sonra yapılır. Döngünün yapısı aşağıdaki gibidir.

 

Do {

            Gövde;

}

            while (şart);

 

Döngü gövdesinde komutlar bulunur. Şart, bool yapısındadır. Eğer dönüş değeri true ise döngü tekrar çalıştırılır. Aksi halde ise döngüye tekrar dönülmez.

 

5.3.8 Döngülerden çıkış

 

Bütün döngülerde döngü test şartı ile terk edilir. Fakat başka bir sebeble döngüden çıkılmak istenirse break ve continue yapıları kullanılır.

 

Break switch bloğundan çıkışı sağlar. Benzer bir şekilde break herhangi bir döngünün içinde kullanıldığında döngüden hemen çıkışı sağlar. İç içe geçmiş döngülerde ise bir dıştaki döngüye seçilir. Döngüden çıkıldığında programın bir sonraki komutuyla devam edilir. İnteger dizisinden float dizisine elemanları kopyalayan program parçasını değiştirelim.

İnt i=0;

While (i < dizi1.length) {

İf (dizi1[i]= =0) {

Break;

}

dizi2[i] = (float)dizi1[i++];

}

 

Continue komutu da yapı olarak break komutuna benzemektedir. Beraber döngüyü tamamen durdurmayıp bir sonraki komutla devam ettirir. Do ve While döngülerinde döngü yeniden çelışır.   For döngüsünde ise önce artım yaptırılır, daha sonrada döngü çalıştırılır. Continue döngü içinde özel durumlar oluşturulmada kullanılır. Bir önceki örneği sıfır olamayan elemanları kopyalama şeklinde değiştirmek istersek şu program parçasını kullanırız.

İnt i= 0;

İnt j=0;

While (i < dizi1.length) {

İf (dizi1[]= =0)

Continue;

Dizi2[j++]= (float)dizi1[i++];

}

 

5.4 Etiketlenmiş Döngüler

 

Break ve continue komutlarında isteğe bağlı olarak konabilen etiketle Javaya nerede programı keseceği bildirilebilir. Etiket olmazsa break döngü dışındaki en yakın komuta atlar. Etiket kullanıldığında ise break komutunun istenildiği yere atlaması sağlanabilir. Etiketli döngü kullanmak içinde döngüden hemen önce etiket konur.

Çık :

For (int i=0;i<50; i++) {

While (x<100){

İf (i*x= =500)

Break çık;

}

}                     

 

Yukarıdaki program parçasında çık etiketi en dıştaki döngüyü göstermektedir. For ve onun içindeki while döngüsü test edilen şart gerçekleştiğinde atlanıp en dıştaki döngüye dallanılmaktadır. Aşağıdaki örnekte ise iç içe for döngüleri içermektedir. En içteki for döngüsünde toplam kontrol edilmekte ve dördü geçtiğinde en dıştaki bloğa atlanmaktadır.

 

Class etiket {

            Public static void main(String args[]) {

Çık:

For (int i=1; i<=10; i++)

For (int j=1; i<=8; i++)

{

system.out.println(“i” + i +”j” + j);

if ((i+j)>4)

break çık;

}

system.out.println(“bitti”);

}