Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Bil 102 Bölüm 6 Diziler 1. 2 Diziler Örn. 40 tane ö ğ rencinin son not ortalamasını tutmak gerekiyor. double ogrenci1 = 65.5; double ogrenci2 = 45; double.

Benzer bir sunumlar


... konulu sunumlar: "Bil 102 Bölüm 6 Diziler 1. 2 Diziler Örn. 40 tane ö ğ rencinin son not ortalamasını tutmak gerekiyor. double ogrenci1 = 65.5; double ogrenci2 = 45; double."— Sunum transkripti:

1 Bil 102 Bölüm 6 Diziler 1

2 2 Diziler Örn. 40 tane ö ğ rencinin son not ortalamasını tutmak gerekiyor. double ogrenci1 = 65.5; double ogrenci2 = 45; double ogrenci3 = 83.5; double ogrenci4 = 66; … double [ ] notlar = newdouble [40]; ? double ogrenci40 = 91;

3 Dizi Aynı veri türüne veya sınıfa ait birbirleri ile ilişkili veriler toplulu ğ u. Dizinin elemanları basit veri türüne ait veya nesneye ait olabilir. Bu duruma göre hafızada uygun yer ayrılır. veri_türü [ ] dizi_adı = new veri_türü [dizi_uzunlu ğ u] ; int [] a = new int[10]; 3

4 Dizi Dizilerde indisler 0’dan başlar. String de oldu ğ u gibi, uzunlu ğ u 5 olan bir dizinin ilk elemanının indisi (bulundu ğ u pozisyon) 0, son elemanının indisi 4 olur. Örn. 7 günlük sıcaklık derecelerini tutmak istersek: ◦ int gun1, gun2, gun3, gun4, gun5, gun6, gun7; ◦ int [ ] sicaklik = new int [7]; ◦ 7 adet int tipinde de ğ işken tanımlamaya eşde ğ erdir: ◦ sicaklik[0], sicaklik[1], sicaklik[2], sicaklik[3], sicaklik[4], sicaklik[5], sicaklik[6] 4

5 Dizi Dizi tanımlandıktan sonra her bir elemanına de ğ er atanabilir: sicaklik[0] = 7; sicaklik[1] =4; sicaklik[2] =-1; sicaklik[3] =-3; sicaklik[4] =0; sicaklik[5] =2; sicaklik[6] =3; 5

6 Dizi - Örnekler Kullanıcının bir aylık sıcaklık de ğ erini klavyeden girece ğ i ve bu de ğ erlerin ortalamasını, en düşük ve en yüksek sıcaklı ğ ı bulan bir kod yazın: 6

7 import java.util.*; public class ortalamaSicaklik { public static void main(String [] args) {Scanner klavye = new Scanner(System.in); double [] sicaklik = new double [30]; int indis, gun1, gun2; double toplam,ortalama, enDusuk, enYuksek; toplam = 0.0; for (indis=0; indis <= 29; indis++) { System.out.print (“Gun: “ + (indis+1) + “ sicaklik: “); sicaklik[indis] = klavye.nextDouble(); toplam += sicaklik[indis]; } ortalama = toplam / 30.0; System.out.println (“Kasim ayi ortalamasi = “ + ortalama); enDusuk = sicaklik[0]; gun1 = 0; enYuksek = sicaklik[0]; gun2 = 0; for (indis=1; indis <=29; indis++) { if (enDusuk > sicaklik[indis]) { enDusuk = sicaklik[indis]; gun1 = indis; } if (enBuyuk < sicaklik[indis]) { enBuyuk = sicaklik[indis]; gun2 = indis; } } System.out.println (“En dusuk sicaklik = “ + enDusuk + “ Gun = “ + (gun1+1)); System.out.println (“En yuksek sicaklik = “ + enYuksek + “ Gun = “ + (gun2+1)); } } 7

8 Dizi tanımlanması double [] sinavNotu = new double [50]; Dizi elemanlarının veri türü Dizinin adıDizide kaç eleman var double [] sinavNotu; sinavNotu = new double[50]; sinavNotu[3] = 78.3; ◦ Dizinin dördüncü elemanı (3 numaralı indis) =

9 length Length ile dizinin büyüklü ğ ünü (eleman sayısını) bulabiliriz. ◦ sinavNotu.length dizinin büyüklü ğ ünü verir double[] sinavNotu = new double[50]; System.out.println (“Dizinin uzunlugu: “ + sinavNotu.length ); Dizinin uzunlu ğ u atama yoluyla de ğ iştirilemez: ◦ sinavNotu.length = 100;// Yazılamaz, hatalı Dizinin boyutlarının dışına çıkmamaya dikkat edilmeli! ◦ sınavNotu[50] = 65.1;//Max indis aşıldı Derleyici hatası olmaz ama program çalışması sırasında Array index out of bounds mesajı alınır (çalışma zamanı hatası) Yukarıdaki sınavNotu dizisinin tanımına göre en son elemanın indisi 49 olur. (0 ile 49 arasında olacak. Toplam 50 eleman.) 9

10 Diziye İ lk De ğ er Atama Diziler yaratıldı ğ ı sırada ilk de ğ erlerini alabilirler: ◦ int [] sicaklik = {17,16,14,15,18,17,16}; ◦ Dizinin 7 elemanlı bir dizi oldu ğ unu anlıyoruz. Veya dizi tanımlandıktan sonra tek tek de ğ er ataması yapılabilir: ◦ int [] sicaklik = new int [7]; ◦ sicaklik[0]=17; sicaklik[1]=16; …; sicaklik[6]=16; 10

11 Diziye İ lk De ğ er Atama int veri tipindeki diziler e ğ er ilk de ğ er almazlarsa otomatik olarak 0’a atanırlar. Fakat programın daha anlaşılır olması için, daha sonra de ğ iştirilmek üzere bütün de ğ erler bir döngü kullanarak 0’a da atanabilir. Kod: int [] sicaklik = new int[365]; int i; for (i=0; i < sicaklik.length; i++) sicaklik[i] = 0; 11

12 Örnekler Bir dizi yapın ve bu diziyi başka bir diziye kopyalayın: … int dizi1 = { 7, 4, 8, 1, 4, 1, 4}; float dizi2 = new float[dizi1.length]; //diziyi yazdir … //dizi1’i dizi2’ye kopyala for(i=0; i< dizi1.length; i++) dizi2[i] = (float) dizi1[i]; //dizi2 yazdir … Örnek 2) Math.random() metodunu kullanarak 500 elemanlı int veri türünde bir dizi yapıp bu dizinin ortalaması, min ve max umunu ekrana basacak programı kodlayınız. 12

13 Sınıf ve Metotlarda Dizi Kullanımı Bir sınıf içinde bir de ğ işken tanımlanabildi ğ i gibi bir dizi de tanımlanabilir. (gerçekleştirme de ğ işkeni) Dizilerin tamamı metotlara gönderilebilirler – parametre olarak-, bu durumda bir nesne olarak gönderildikleri için referans ile ça ğ ırma tekni ğ iyle gönderilmiş olurlar. E ğ er dizinin bir elemanı metoda gönderilirse ve dizi elemanlarının veri tipi basit ise de ğ er ile ça ğ ırma tekni ğ i uygulanır, e ğ er dizi elemanları nesne ise referans ile ça ğ ırma tekni ğ i uygulanır. 13

14 Elemanları Ogrenci adında bir sınıf tipinde olan kayit adında bir dizi oluşturun: Ogrenci [] kayit; kayit[i] = new Ogrenci(); // kayit dizisinin her bir elemani Ogrenci sinifinin bir nesnesi 14

15 Metoda Giren İ ndisli Dizi Elemanları Dizinin bir elemanı metoda parametre olarak yollanabilir. ortalama = ortalamaBul (birinciDeger, sicaklik[i]); Bu örnekte sicaklik ve birinciDeger parametrelerinin ortalamaları ortalamaBul metoduyla hesaplanmaktadır. Bu durumda sicaklik[i] metot tanımındaki veri tipinde sıradan bir de ğ işken olarak metoda gönderilmiştir. E ğ er metoda gönderilen dizinin veri tipi basit veri tipiyse, metot bu indisli dizi elemanın de ğ erini de ğ iştiremez. E ğ er, veri tipi bir nesne ise, referans ile ça ğ ırma vasıtasıyla bu indisli elemanın de ğ eri de ğ işebilir. 15

16 Metoda Giren Diziler Bir diziyi metoda gönderirken köşeli parantezler kullanılmaz. Gönderilen dizi bir nesne olarak gönderilmiş olur. double [] sicaklik = new double[30]; ortalama = ortalamaBul (sicaklik); Bu durumda ortalamaBul metodu bir diziyi argüman olarak almaktadır ve bir double de ğ eri alan ortalama geri vermektedir. ortalamaBul de ğ erinin tanımı ise aşa ğ ıdaki şekilde olabilir. public double ortalamaBul (double[] deger) { int i, toplam = 0; for (i = 0; i < deger.length; i++ ) toplam = toplam + deger[i]; return (toplam/deger.length); } 16

17 Diziler de birer nesne gibi düşünüldü ğ ü için diziler için atama “=” ve eşitlik “==” kavramları dizilerde de geçerli de ğ ildir. İ ki dizi için “=” ifadesi kullanıldı ğ ında bu iki dizinin referansı (bellekteki gösterimleri eşitlenmiş olur, dolayısıyla iki dizi de aynı diziyi gösteriyor olurlar.) Aynı şekilde “==” gösterimi ancak iki dizi aynı referansa sahip oldu ğ unda do ğ ru olmaktadır. Bunun yerine nesnelerde oldu ğ u gibi bir equals metodu tanımlamak gerekmektedir. 17

18 int [] a = new int[3]; int [] b = new int[3]; int i; for (i = 0; i < a.length; i++ ) a[i] = i; for (i = 0; i < a.length; i++ ) b[i] = i; if (b==a) System.out.println (“== kullanarak esittirler.”); else System.out.println (“== kullanarak esit degildirler.”); == kullanarak esit degildirler 18

19 public class TestEsitlik { public static void main(String[] args) { int[] a = new int[3]; int[] b = new int[3]; int i; for (i = 0; i < a.length; i++) a[i] = i; for (i = 0; i < b.length; i++) b[i] = i; if (b == a) System.out.println("== ile esit."); else System.out.println("== ile esit degil."); if (esit(b,a)) System.out.println(“Esit metodu ile esit."); else System.out.println(" Esit metodu ile esit degil."); } public static boolean esit(int[] a, int[] b) { boolean denkmi; if (a.length != b.length) denkmi = false; else { denkmi = true; //gecici olarak true degeri ata int i = 0; while (denkmi && (i < a.length)) { if (a[i] != b[i]) denkmi = false; i++; } } return denkmi; } } 19 == ile esit degil Esit metodu ile esit Static bir metod icinden (main) static bir baska metodu (esit) cagirdigimiz icin, ve her ikisi de ayni sinif icinde tanimli oldugu icin sadece adini kullanmamiz yeterli. Nesne olusturup onun uzerinden cagirmamiza gerek yok.

20 Dizi Döndüren Metotlar public int faktoriyel(int sayi) Javada metotlar bir nesne döndürebilirler. Diziler de birer nesne olarak kabul edildikleri için metotlarda dizi döndürmek mümkündür. Bu tip bir metot aşa ğ ıdaki gibi tasarlanır. public veri_tipi[] metot_ismi (parametre listesi) Metodun ulaşılabilirli ğ i public ya da private olabilir. Ayrıca metot static olarak da tanımlanabilir. 20

21 Dizi Döndüren Metotlar public static char [] sesliHarfler () { char[] yeniDizi = new char[8]; yeniDizi [0] = ‘a’; yeniDizi [1] = ‘e’; yeniDizi [2] = ‘ı’; yeniDizi [3] = ‘i’; yeniDizi [4] = ‘o’; yeniDizi [5] = ‘ö’; yeniDizi [6] = ‘u’; yeniDizi [7] = ‘ü’; return yeniDizi; } 21

22 Dizi De ğ erlerinin Sıralanması De ğ erleri küçükten büyü ğ e veya tersi şekilde sıralamak için. Kabarcık sıralama (Bubble Sort) (n sayıyı küçükten büyü ğ e sıraya dizmek için bir algoritma) Algoritma için iç içe iki döngü ve bir yineleme sayacı kullanılır. Bu yineleme sayacının bir turunda, dizideki kalan en büyük sayı dizinin sonuna gider. Buna göre ilk yinelemede dizinin en büyük sayısı en sona gider. Bundan sonra artık en son sayıyı denetlemeye gerek yoktur. İ kinci yinelemede en büyük ikinci sayısı sondan bir önceki yere gider. Bu şekilde n-1 yinelemede n sayı sıraya dizilmiş olur. Her yinelemede ise denetlenmesi gereken sayı adedi 1 azalır. 22

23 Kabarcık Sıralama (Bubble Sort) ◦ ◦ ◦ ◦ ◦  Tamamlandı 23

24 public class kabarcikSiralama { final static int maksEleman = 2000; public static void main(String[]args) { int n; Scanner klavye = new Scanner(System.in); int[] liste = new int[maksEleman]; //listeyi yarat System.out.print("Liste boyunu giriniz:"); n = klavye.nextInt(); for(int i=0; ix[i+1]) { gecici = x[i]; x[i] = x[i+1]; x[i+1] = gecici; } return x; }} 24 Static bir metod icinden (main) static bir baska metodu (kabarcik) cagirdigimiz icin, ve her ikisi de ayni sinif icinde tanimli oldugu icin sadece adini kullanmamiz yeterli. Nesne olusturup onun uzerinden cagirmamiza gerek yok.

25 Dizilerde Veri Türü Olarak Nesne Kullanılması Bir dizinin eleman tipi nesne olabilir. public class Kisi { private String isim; private String ePosta; private String dogumYeri; private double gpa; // public Kisi(String a, String b, String c, double o) { isim=a;ePosta=b;dogumYeri=c;gpa=o; } // public Kisi() { } // public void setIsim(String adSoyad) { isim=adSoyad; } … } 25 Kisi [] ogrenci = new Kisi [maksMevcut]; ogrenci[i] = new Kisi(); //nesne kurucu ogrenci[i].setIsim(“Ali Veli”);

26 Çok Boyutlu Diziler Matris veya çok boyutlu veri gösterimi için kullanılırlar. 2 Boyutlu bir dizi: veri_turu [] [] matris = new veri_turu [4] [4]; Bir elemana ulaşmak için yerini 2 indisi de kullanarak tespit etmek lazım. matris[1][1] = 70; matris[0] [0]= 80; matris[1][0]=67; matris[2][3]=36;

27 Çok Boyutlu Diziler Çok boyutlu diziler aslında her boyut içinde yer alan birer boyutlu dizilerin bileşkesidir. Tüm dizinin uzunlu ğ u (büyüklü ğ ü) her boyuttaki dizilerin uzunlu ğ unun çarpımına eşittir. Örnek: int [][] tablo = new int [10][20]; tablo[3][5] = 23; System.out.println (“Tablo cok boyutlu dizisinin uzunlugu: “ + tablo.length);  10 27

28 Ayrıca her boyuttaki dizilere de ayrı ayrı erişebiliriz, bunları da birer boyutlu diziler olarak kullanabiliriz. Örnek: int [][] tablo = new int [3][10] yazmak yerine int [][] tablo; tablo = new int [3][]; tablo[0] = new int [10]; tablo[1] = new int [10]; tablo[2] = new int [10]; yazılabilir ve bu iki ifade de birbirine denktir. Bu şekilde çok boyutlu diziyi oluşturan tek boyutlu dizilerin uzunluklarını da ayrı ayrı kullanmak mümkün olabilir. Buna göre tablo[0].length ifadesi 0. indisteki dizinin uzunlu ğ unu gösterir. 28

29 int [][] matris = new int [4][4]; for (sira = 0; sira <4; sira++ ) for (sutun = 0; sutun <4; sutun++ ) matris [sira][sutun] = (int) (Math.random()*5) + 1; for (sira = 0; sira <4; sira++ ) { for (sutun = 0; sutun <4; sutun++ ) System.out.print (matris[sira][sutun] + “ “); System.out.println (); } Çıktı:

30 Referans : kadio ğ lu 30


"Bil 102 Bölüm 6 Diziler 1. 2 Diziler Örn. 40 tane ö ğ rencinin son not ortalamasını tutmak gerekiyor. double ogrenci1 = 65.5; double ogrenci2 = 45; double." indir ppt

Benzer bir sunumlar


Google Reklamları