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. 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} 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.
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++]; } İ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”); |