Java Temelleri : Java Diziler

advertisement
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’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]’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
Download