Java Diziler Java Diziler Javada diziler nesnedirler, cdeki gibi hafızada yer kaplayan pointer değillerdir. Javada diziler, cye göre daha güvenilirdir. Dizilerin elemanlarına gelişigüzel değerler atayamazsınız. Java, dizi elemanlarını sırasıyla kontrol eder. Dolayısıyla arada değer atanmamış bir elemana rastlanırsa hata oluşur. Bu da cde çıkan hafıza bozulmalarını önler. Javada dizi kullanmak için ilk önce dizinin tipi verilir. Tip verilirken dizinin büyüklüğü belirtilmez Diziler Diziler aynı veri tipinde birden fazla veriyi barındıran veri tiplerine dizi adı verilir. Örneğin 100 kişinin adını program içinde bir değişkendetutmak için 100 tane String değişken tanımlamak yerine dizi kullanılır. Dizideki her bir elemana indeks numarası ile erişilir. Mesela notlar değişkeni integer tipinde bir dizi ise notlar[i] ifadesi dizinini. tamsayısını gösterir. Bir dizi tanımlamak için dizi hangi veri tipinde olacak ise veritipinin adı yazıldıktan sonra “[ ]” eklenir ve dizi değişkeni yazılır. Örneğin tamsayı tipinde dizi tanımlamak için www.dijitalders.com Java Diziler 1 Java Diziler int[ ] notlar; //integer tipinde notlar değişken dizisini tanımlar. Yukarıdaki ifade notlar dizisinin tanımlamasını yapar fakat diziye herhangi bir değer atayamazsınız. Diziye değer atamak için başlatılması gerekir, bu amaçla; int[ ] notlar; notlar=new int[5]; //new operatörü ile başlatma yapılır Dizi tanımlaması yaparken kullanılan köşeli parantezler veritipiyerine değişken adından sonra da yazılabilir; int notlar[ ]=new int[5]; Diziler int[ ] ciftSayilar=new int[10]; for (int i=;i<10;i++) ciftSayilar[i]=i*2; for (int i=;i<10;i++) System.out.println(i + ". sırada: "+ ciftSayilar[i]); /*yukarıdaki kodda dikkat edilmesi gereken dizilerin ilk elemanı 0&#8217;dan başlar, son elemanı ise tanımda belirtilen sayının bir eksiğidir. Yukarıda 0-9 arasında indeks değerleri alır. */ Dizi Boyutu Bir dizideki eleman sayısını bulmak için length özelliği kullanılr. örneğin; int[ ] notlar=new int[5]; int boyut=notlar.length //boyut=5 dizinin boyutu dizi başlatıldıktan sonra oluşur, örneğin; int[ ] notlar; int boyut=notlar.length //hata verir. Dizi Başlangıç Değerleri Diziler tanımlanırken başlangıç değeri atamak için; www.dijitalders.com Java Diziler 2 Java Diziler int[ ] asalSayilar={ 2, 3, 5, 7, 11, 13 }; yukarıdaki ifade 6 elemanlı bir dizi oluşturur ve parantezler içindeki sayıları diziye atar. Bu dizi oluşturulurken new operatörünün kullanılmasına gerek yoktur. New operatörü diziyi bellekte başlatmak için gereklidir, burada ise dizi başlangıç değerleri atayarak başlatıldığından buna gerek yoktur. Diziler Javada 0 elemanlı diziler tanımlayabilirsiniz; int[ ] donusDizi=new int[]; Bu tip bir dizinin kullanım yeri dönüş tipi dizi olan bir metot boş değer döndüreceğinde kullanılabilir. Array kütüphanesini kullanmak için java kodunun başlangıcına yazılması gereken satır: import java.util.*; Dizilerin Kopyalanması Bir diziyi başka bir diziye kopyalamak için dizi şeklinde tanımlanmış iki değişken birbirine atama yapıldığında her iki deişkende aslında aynı diziyi (belleğin aynı yerini) göstermeye başlar. Bu işlem C’de bir pointerın değerinin bir ka pointera atanması gibidir. int[ ] asalSayilar={ 2, 3, 5, 7, 11, 13 }; int[ ] yeniSayilar=asalSayilar; yeniSayilar[5]=17; //asalSayilar[5]&#8217;de 17 olur Bir dizinin kopyasının başka bir dizi değişkeni şeklinde bellekte kopyalanmasını isetersek System sınıfının arraycopy() metodunu kullanırız. System.arraycopy(HangiDiziden, kaynakBaslangicSirasi, HangiDiziye, hedefBaslangicSirasi, kacTane); int[ ] asalSayilar = {2, 3, 5, 7, 11, 13}; int[ ] sansliSayilar= {1001,1002,1003,1004, 1005, 1006,1007}; System.arraycopy(asalSayilar, 2, sansliSayilar, 3, 4); www.dijitalders.com Java Diziler 3 Java Diziler for (int i = ; i < sansliSayilar.length; i++) System.out.println(i + ": " + sansliSayilar[i]); Ekran çıktısı; 0: 1001 1: 1002 2: 1003 3: 5 4: 7 5: 11 6: 13 Komut Satırı Parametreleri Şu ana kadar gördüğümüz bütün java programları main metodu içermekteydi ve bu metotların hepsi String[ ] args parametresi almakta idi. public static void main(String[] args) Bu bize programa komut satırından verilen parametrelerin dizi olarak saklandığını ve bu dizinin args adında olduğunu anlatr. public class Ders5{ public static void main(String[] args) { if (args[].equals("-h")) System.out.println("Help satırı"); else if (args[].equals("-s")){ System.out.print("Selam, "); // bütün komut satırı parametrelerini yaz for (int i = 1; i < args.length; i++) System.out.print(" " + args[i]); } } } Dizilerin Sıralanması Sayı veritipinden oluşan dizilerin sıralanması için java.util paketindeki Arrays sınıfının sort() metodu kullanılmaktadır. int[ ] a = new int[10000]; ... Arrays.sort(a) Bu metot birçok durumda çok hızlı sonuçlar veren hızlı sıralama (quicksort) algoritmasın kullanmaktadır. www.dijitalders.com Java Diziler 4 Java Diziler Dizide arama yapma Bir sayı dizisinde sayı değeri aramak için Arrays sınıfının binarySearch metodu kullanılır; static int binarySearch(Xxx[ ] a, Xxx v) Parametreler: a:int, long, short, char, byte, boolean, float veya double veritiplerinden birinde tanımlanmış sıralı bir dizi v: a dizisi ile aynı veri tipinde bir değer Bu metot binarysearch algoritmasını kullanarak a dizisini tarar ve v’nin bulunduğu yerin indeks numarasnı döndürür. Eğer v’yi bulamaz ise v’nin olması gerektiği yerin bir fazlasının negatif değerini döndürür. Örneğin -5 dönmüş ise aranan değer sıralı dizide bulunamamıştır, eğer bulunsa idi 4. sırada bulunması gerekirdi. Dizinin içini doldurmak Bir sayı dizisinin içini belirli bir değer ile doldurmak için Arrays sınıfının fill() metodu kullanılır. static void fill(Xxx[ ] a, Xxx v) Burada a: int, long, short, char, byte, boolean, float veya doubletipinde bir dizi,v: Belirtilen dizi ile aynı veritipinde bir değerdir. int[ ] aramaDizisi=new int[ ]; Arrays.fill(aramaDizisi, ); Dizileri Karşılaştırmak İki sayı dizisini karşılaştırmak için Arrays.equals(birinci dizi[ ], ikinci dizi[ ]) metodu kullanılır, metodun kullanımı şu şekildedir; int[ ] asalSayilar = {6, 3, 99, 7, 11, 13}; int[ ] dizi2= {6, 3, 99, 7, 11, 13, 17}; System.out.println(Arrays.equals(asalSayilar, dizi2)); //true yazar Çokboyutlu diziler Çokboyutlu diziler matrislerin bilgisayardaki karşılıklarıdır ve birden fazla indeks kullanırlar, örneğin iki boyutlu bir dizi iki boyutlu matris gibidir ve gösterimi şu şekildedir; int[ ][ ] tablo=new int[3][3] ; int[ ][ ] sihirliKare={ {16, 3, 2, 13}, {5, 10, 11, 8}, {9, 6, 7, 12}, www.dijitalders.com Java Diziler 5 Java Diziler {4, 15, 14, 1} }; Javada gerçekte bütün diziler tek boyutludur, örneğin iki boyutlu bir dizi tanımlarsanız bu bellekte tek boyutlu dizilerden oluşan bir dizi olarak saklanır. Bu bizim dizilerle oynamamızı kolaylaştırır, Örneğin; int[ ] temp=sihirliKare[1]; sihirliKare[2]=sihirliKare[1]; sihirliKare[1]=temp; satırlarının yerlerini değiştirir (büyü bozuldu). //sihirliKare dizisinin 2. ve 1. Adi Diziler Javada çok boyutlu dizilerin dizilerden oluşan diziler olarak tanımlanması bize satır boyutları farklı iki boyutlu dizi oluşturma imkanı sağlar. int NMAX = 5; int[][] odds = new int[NMAX+1][]; for (n = ; n <= NMAX; n++) odds[n] = new int[n+1]; for (n = ; n < odds.length; n++) for (k = ; k < odds[n].length; k++) { odds[n][k] = k; } for (int n = ; n < odds.length; n++) { for (int k = ; k < odds[n].length; k++) { // pad output with spaces String output = " " + odds[n][k]; // make output field 4 characters wide output = output.substring(output.length() - 4); System.out.print(output); } System.out.println(); } Kaynak Uğur Kahraman www.dijitalders.com Java Diziler 6 Java Diziler www.dijitalders.com Java Diziler 7