Veri Yapıları – 2010 Java Programlama Diline Giriş Doç. Dr. Aybars UĞUR Bölüm 1 GİRİŞ Java • Java, ilk olarak Sun Microsystems tarafından geliştirilen nesne yönelimli programlama dilidir. • 1995 yılında piyasaya sürülmüştür. Gosling, Haziran 1991’de “Oak” geliştirmiştir. James adıyla • Platform bağımsızlığı (programı bir kere yaz, derle ve her platformda çalıştır), tasarım amaçlarındandır. Birçok donanım, işletim sistemi ve platformda çalışabilmektedir. VERİ YAPILARI 01 Java Temel Kavramlar 3 Önemli Java Gerçekleştirimleri Sürüm Ad Açıklama JDK 1.1 (1995) Java 1.0 İlk sürüm J2SE 1.2(1998) J2SE Java 2 J2SE (Java 2 Platform, Standard Edition) J2EE (Java 2 Platform, Enterprise Edition) J2ME (Java 2 Platform, Micro Edition). J2SE 5.0(2004) J2SE Tiger Generic yapılar, Autoboxing/Unboxing Gelişmiş for döngüsü, Varargs (Değişken sayıda argüman) J2SE 6 (2006 sonu) : Mustang J2SE 7 (Ağustos 2006-2010) : Dolphin Son gelişmeler için : http://en.wikipedia.org/wiki/Java_version_history VERİ YAPILARI 01 Java Temel Kavramlar 4 JVM ve Bytecode • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın özgün sanal makine modelini gerçekleştiren bilgisayar programları ve yapılarından oluşan bir bütündür. • “Java Bytecode” adı verilen, bilgisayar ara dilini kabul eder. Bir programın bytecode’u, Java dili derleyicileri tarafından üretilir. VERİ YAPILARI 01 Java Temel Kavramlar 5 İlk Java Programı Prog1 adlı java programı : class Prog1 { public static void main(String args[]) { System.out.println("Merhaba"); } } ekrana merhaba yazdırmaktadır. VERİ YAPILARI 01 Java Temel Kavramlar 6 Java Uygulaması Java programlarında // Satırın geri kalan kısmının açıklama satırı olduğunu gösterir. Geleneksel /* Açıklama */ işaretleri de özellikle çok satıra yayılan açıklamalarda kullanılır. Deyimler “;” ile sonlandırılmalıdır. Her java programı en az bir sınıf tanımı içermelidir. VERİ YAPILARI 01 Java Temel Kavramlar 7 Java Programının Çalıştırılması JVM’i (Java Virtual Machine) açmak üzere Java komutu kullanıldığında işletilen bilgisayar programına Java uygulaması (application) denilir. DERLEME Kaynak Kod Byte Kod javac derleyicisi Prog1.java Prog1.class class Prog1 { public static void main(String args[]) { System.out.println("Merhaba"); } } Byte Kod Prog1.class .. .. .. .. .. 80 1a .. .. .. .. .. .. .. .. .. > javac Prog1.java .. 80 1a .. .. .. .. .. JVM tarafından yorumlanabilir. ÇALIŞTIRMA java yorumlayıcısı > Merhaba > java Prog1 VERİ YAPILARI 01 Java Temel Kavramlar 8 Entegre Geliştirme Ortamları • Programların IDE (Integrated Development Environment) kullanılarak yazılması, işletilmesi, test edilmesi ve hatalardan arındırılması kolay olduğu için, bu şekilde uygulama yazılması işlemine RAD (Rapid Application Development) adı verilmektedir. • • • • • Eclipse (http://www.eclipse.org/) NetBeans (http://www.netbeans.org/products/platform/) JDeveloper (from Oracle) IntelliJ (JetBrains) JCreator (http://www.jcreator.com/) … VERİ YAPILARI 01 Java Temel Kavramlar 9 Bölüm 2 JAVA’da VERİ TİPLERİ Veri Tipleri • Java’da iki tür veri tipi vardır: – Temel – Referans • İki tür veri tipi arasındaki fark atama işlemi sırasında ortaya çıkar. • Temel tipteki bir değişkenin diğer bir değişkene ataması sırasında veri kopyalanır. • Referans değişkeninin diğer bir değişkene ataması sırasında ise, her iki değişken de aynı veriyi gösterir. Referanslar, C/C++ işaretçilerine (pointer) benzerler. • Diziler ve Nesnelerin tümü referans veri tipindedir. VERİ YAPILARI 01 Java Temel Kavramlar 11 Java’da Temel Veri Tipleri Type Size in bits Values boolean 1 true or false byte 8 -128 to +127 char 16 Unicode short 16 integer int 32 integer long 64 integer float 32 float double 64 double VERİ YAPILARI 01 Java Temel Kavramlar 12 Temel Veri Tiplerinin Sınırları • Tamsayıların Sınırları • Ondalıklı Sayıların Sınırları VERİ YAPILARI 01 Java Temel Kavramlar 13 Java’nın 8 Temel Veri Tipi Type Size in bits Values Standard boolean char byte short int 8 16 8 16 32 true or false ’\u0000’ to ’\uFFFF’ –128 to +127 –32,768 to +32,767 –2,147,483,648 to +2,147,483,647 long 64 float 32 double 64 –9,223,372,036,854,775,808 to +9,223,372,036,854,775,807 –3.40292347E+38 to +3.40292347E+38 –1.79769313486231570E+308 to +1.79769313486231570E+308 (ISO Unicode character set) (IEEE 754 floating point) (IEEE 754 floating point) Sarmalayıcı (Wrapper) Sınıflar • • • • java.lang.Byte java.lang.Short java.lang.Integer java.lang.Long • java.lang.Float • java.lang.Double • java.lang.Character • java.lang.Boolean VERİ YAPILARI 01 Java Temel Kavramlar 14 ASCII ve UNICODE Karakter Setleri • ASCII, 8 bit kodlama düzenindedir ve en yaygın karakter setidir. 256 karakterle sınırlıdır. • Unicode, 16 bitlik kodlama düzenindedir ve 65536 karakterlik sahası vardır. • Java programlama dili Unicode’u kullanır. VERİ YAPILARI 01 Java Temel Kavramlar 15 İkiye Tümleyen (Two’s Complement) İkiye tümleyen, negatif sayıları İkili sayılar içerisinde göstermek için kullanılan bir yöntemdir. İlave bir + ve − sembolüne ihtiyaç duyulmaz. İkili (binary) bir sayının ikiye tümleyeni (two’s complement), sayının ikinin üssünden çıkartılması ile elde edilir (n bitlik ikinin tümleyeni için, 2N’den çıkarılır). Negatif sayıların ikili kodlanması esnasında ikiye tümleme metodu kullanılmadığı taktirde, sayının işareti için ayrı bir bit harcanması gerekir. Birbirinden farklı işarete sahip birden fazla 0 sayısının oluşmasına sebep olur. Bitlerin değerlerini ve anlamlarını değerlendirecek bir yönetimdenetim mekanizması kullanılması gerekir. VERİ YAPILARI 01 Java Temel Kavramlar 16 8 Bitlik İkinin Tümleyeni Tamsayılar A two's-complement system or two's-complement arithmetic is a system in which negative numbers are represented by the two's complement of the absolute value. Pozitif Sayılar doğal şekildedir: this system is the most common method of representing signed integers on computers. In such a system, a number is negated (converted from positive to negative or vice versa) by computing its two's complement. Sınırları : [-2N-1 … 2N-1-1] VERİ YAPILARI 01 Java Temel Kavramlar 17 Java Byte Data Type Decimal 8 bit Binary Invert 0 0000 0000 - - +1 0000 0001 1111 1110 1111 1111 -1 +2 0000 0010 1111 1101 1111 1110 -2 +3 0000 0011 1111 1100 1111 1101 -3 +4 0000 0100 1111 1011 1111 1100 -4 +5 0000 0101 1111 1010 1111 1011 -5 add 1 for Twos Complement ¯ Decimal - ¯ 124 0111 1100 1000 0011 1000 0100 -124 125 0111 1101 1000 0010 1000 0011 -125 126 0111 1110 1000 0001 1000 0010 -126 127 0111 1111 1000 0000 1000 0001 -127 - - 1000 0000 -128 - VERİ YAPILARI 01 Java Temel Kavramlar 18 IEEE 754 Standard for Floating-Point Arithmetic • http://tr.wikipedia.org/wiki/IEEE_754 • http://en.wikipedia.org/wiki/IEEE_754-1985 • IEEE Kayan Nokta Aritmetiği Standardı, kayan noktalı sayıların gösteriminde en çok kullanılan standarttır. • IEEE 754 standardına göre sayılar tek duyarlı (32 bit) ve çift duyarlı(64 bit) şekilde gösterilebilirler. VERİ YAPILARI 01 Java Temel Kavramlar 19 IEEE 754 : Tek Duyarlı Gösterim Tek duyarlı gösterimde sayı 32 bitle ifade edilir. Bu bitlerden biri işaret, 8'i üs 23 tanesi ise anlamlı kısmın gösterimi için kullanılır. Tek duyarlı gösterimde üs için kaydırma değeri 28-1-1 = 127 olarak hesaplanır. 1 bit İşaret sign 8 bit Üs exponent 23 bit Anlamlı Kısım fraction VERİ YAPILARI 01 Java Temel Kavramlar 20 IEEE 754 : Tek Duyarlı Gösterim Tek duyarlı gösterimde 6,375 sayısını temsil etmek istersek : 6 → (110)2 0,375 × 2 = 0,75 0,75 × 2 = 1,5 0,5 × 2 = 1,0 0,375 = (0,011)2 → 6,375 = (110,011)2 Sayıyı olağan duruma getirirsek Sayı > 0 olduğundan işaret biti Sayının üst değerinin saptırılmış hali Anlamlı kısım Sayı son olarak şeklinde ifade edilir. : 110,011 = 1,10011x22 :0 : 2+127 = 129 → 12910 = 100000012 : 10011000000000000000000 : 0 10000001 10011000000000000000000 VERİ YAPILARI 01 Java Temel Kavramlar 21 IEEE Tek Duyarlı Gösterimdeki Bir Sayının Onluk Düzendeki Değerinin Bulunması v = s × 2e × m where – s = +1 (positive numbers and +0) when the sign bit is 0 – s = −1 (negative numbers and −0) when the sign bit is 1 – e = exponent − 127 (in other words the exponent is stored with 127 added to it, also called "biased with 127") – m = 1.fraction in binary (that is, the significand is the binary number 1 followed by the radix point followed by the binary bits of the fraction). Therefore, 1 ≤ m < 2. (1+fraction) 0 10000001 10011000000000000000000 v = +1 * 22 * (1,10011)2 = 6,375 1+ 0,5+ 0,0625+ 0,03125 = 1,59375 VERİ YAPILARI 01 Java Temel Kavramlar 22 IEEE 754 : Çift Duyarlı Gösterim Çift duyarlı gösterimde sayı 64 bitle ifade edilir. Bu bitlerden biri işaret, 11'i üs ve 52 tanesi de anlamlı kısmı ifade etmek için kullanılır. Bu gösterimde üs için sapma değeri 211-1-1 = 1023 olarak hesaplanır. 1 bit İşaret sign 11 bit Üs exponent 52 bit Anlamlı Kısım fraction VERİ YAPILARI 01 Java Temel Kavramlar 23 Değişkenler - I Tip değişken ismi int sayi1; // int veri tipidir. /* sayi1 değişkeninin tamsayı tipinde olduğunu belirtir */ ........ sayi1=5; float sayi=5.7f; VERİ YAPILARI 01 Java Temel Kavramlar 24 Değişkenler - II • Değişkenler, tanımlandıkları gibi değer alırlar: int a = -5; double b = 10.3; • Aynı satırda birden çok değişken tanımı yapılabilir. • C++ programlama Dilinde olduğu gibi değişkenler, herhangi bir yerde tanımlanabilir. Metodun en üstünde tanımlanma zorunluluğu yoktur. • Değişkenlerin, gerekli olduğu yerde tanımlanması uygundur. • Java Dilinde değişkenlerin kullanılmadan önce değerleri olması gerekir. • Değişkenler sadece tanımlandıkları blokta kullanılabilirler. VERİ YAPILARI 01 Java Temel Kavramlar 25 Veri Tipi Dönüştürme (Casting) • Daha geniş bir tipi, daha dar bir veri tipine dönüştürürken “casting” yapmak gerekir. double sayi1=5; // float sayi2 = sayi1; // Yanlış float sayi2 = (float)sayi1; // Doğru double sayi3 = sayi2; /* Geniş tip olduğundan problem yok */ VERİ YAPILARI 01 Java Temel Kavramlar 26 Yazdırma Komutu • System.out.print ve System.out.println System.out.print(“Merhaba”); System.out.println(“Java Dili”); Merhaba Java Dili System.out.println(“\nOrtalama="+57); System.out.println(5); int sayi = 5; System.out.println("Sayi\tKaresi"); System.out.println(sayi+"\t"+(sayi*sayi)); • Sayi Karesi • 5 25 • System.out.printf (J2SE 5.0’ın yeni özelliklerindendir) String str = "Java"; double versiyon = 5.0; System.out.printf("Merhaba %s %f ", str, versiyon); VERİ YAPILARI 01 Java Temel Kavramlar 27 Java’da Klavyeden Okuma import java.util.Scanner; class Dene { public static void main(String args[]) { Scanner str = new Scanner(System.in); int i = str.nextInt(); System.out.println(""+(i*i)); } } Ayrıntılar için : http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html VERİ YAPILARI 01 Java Temel Kavramlar 28 OPERATÖRLER - I Hesaplamalarda kullanılan operatörler : Aritmetik : +, -, *, /, % (Mod, kalan), ++, -Mantıksal : &&, ||, !, &, |, ..... İlişkisel : == (eşittir) != (eşit değildir) >, <, >=, <= VERİ YAPILARI 01 Java Temel Kavramlar 29 OPERATÖRLER - II Atama Operatörü : değişken = deyim; int x = 5; double sayi = -3.5; int a, b, c; a=b=c=100; // Atama zinciri Bileşik Atamalar : +=, -=, *=, /=, ..... x-=10; // x = x - 10 ile eşdeğer VERİ YAPILARI 01 Java Temel Kavramlar 30 Operatörler ve Öncelik Sırası Gruplama Postfix Unary Creation, cast Multiplicative Additive Shift Relational Equality Bitwise AND Bitwise EXOR Bitwise OR Logical AND Logical OR Conditional Assignment Operatorler [] . (params) exp++ exp-++exp --exp +exp -exp ~ ! new (type)exp * / % + << >> >>> < > <= >= instanceof == != & ^ | && || ?: = *= /= %= += -= >>= <<= >>>= &= ^= |= VERİ YAPILARI 01 Java Temel Kavramlar 31 Bölüm 3 YAPISAL PROGRAMLAMA ve DENETİM YAPILARI YAPISAL PROGRAMLAMA Yapısal Programlamada üç tür denetim yeterlidir: • Sıra (Sequence) • Seçim (Selection) • Tekrar (Repetition) Sıralı işletim ? VERİ YAPILARI 01 Java Temel Kavramlar 33 PROGRAM DENETİM YAPILARI • SEÇİM YAPILARI – if – if/else – switch • TEKRAR YAPILARI (Döngüler) – while – do/while – for VERİ YAPILARI 01 Java Temel Kavramlar 34 SEÇİM YAPILARI : IF if (koşul) ifade if(notu>=60) System.out.println("Geçti"); Koşul : boolean veri tipindedir. true veya false olabilir. int notu=65, sayac=0; if(notu>=60) // İfade bloğu { System.out.println("Gecti"); sayac++; }; VERİ YAPILARI 01 Java Temel Kavramlar 35 SEÇİM YAPILARI : IF/ELSE if (koşul) ifade; else ifade; if(notu>=60) System.out.println("Gecti"); else System.out.println("Kaldı"); VERİ YAPILARI 01 Java Temel Kavramlar 36 CONDITIONAL OPERATOR (?:) System.out.println(notu>=60? "Geçti":"Kaldı"); Eşdeğer ifade : if (notu>=60) System.out.println("Geçti"); else System.out.println("Kaldı"); VERİ YAPILARI 01 Java Temel Kavramlar 37 IF-ELSE-IF MERDİVENİ (CASCADING IF) if(koşul) ifade else if (koşul) ifade else if (koşul) ifade ............... else ifade; if (notu>=90) str = “A”; else if (notu>=80) str = “B”; else if (notu>=70) str = “C”; else if (notu>=60) str = “D”; else str = “E”; System.out.println(str); VERİ YAPILARI 01 Java Temel Kavramlar 38 SEÇİM YAPILARI : SWITCH Çoklu Seçim switch (deyim) { case sabit1: ifade1; break; case sabit2: ifade2; break; .... default : ifade; break; } int sayi = 4; switch(sayi) { case 0 : System.out.println(" Sayı 0"); break; case 1 : System.out.println(" Sayı 1"); break; case 2 : System.out.println(" Sayı 2"); break; default : System.out.println("X"); break; VERİ YAPILARI 01 Java Temel Kavramlar 39 DÖNGÜLER : FOR sayac : kontrol değişkeni olmak üzere, for(int sayac=0; sayac<10; ++sayac) ifade for(başlangıç; devam koşulu; kontrol değişkeni değişimi) ifade for(int sayac=0; sayac<10; ++sayac) { ifadeler } VERİ YAPILARI 01 Java Temel Kavramlar 40 DÖNGÜLER : WHILE ve DO-WHILE while(koşul) ifade do { ifadeler } while (koşul); int sayac=1, toplam=0; while(sayac<10) { toplam+=sayac; sayac++; }; VERİ YAPILARI 01 Java Temel Kavramlar 41 DÖNGÜDEN ÇIKMAK : BREAK for(int x=1; x<10; ++x) { toplam+=x; if (x==5) break; } System.out.println("1 ile 5 arasındaki sayıların toplamı = "+toplam); break sadece en içteki döngüden çıkar. VERİ YAPILARI 01 Java Temel Kavramlar 42 DÖNGÜDE ERKEN TEKRAR : CONTINUE 1 ile 100 arasındaki tek sayıları yazan program : for(int i=0; i<100; ++i) { if ( (i%2)!=1) continue; System.out.println(i); } VERİ YAPILARI 01 Java Temel Kavramlar 43 Mantıksal Operatörler • VE : Conditional AND && • VEYA : Conditional OR || if ( (yas>50) && (boy>170) ) …; Conditional ve/veya, kısa devre hesaplaması yapabilir. • VE : Boolean Logical AND & • VEYA : Boolean Logical OR | if ( (yas>50) && (boy>170) ) …; Boolean mantıksal ve/veya, tüm operand’ları hesaplar. VERİ YAPILARI 01 Java Temel Kavramlar 44 Bölüm 4 DİZİLER DİZİLER - I Dizi (array), aynı tipteki değişkenler topluluğudur. int[] arr = new int[10]; int[] dizi = {5,7,12,2,9,8,14,21,-6,5}; 0 1 2 3 4 5 6 7 8 9 5 7 12 2 9 8 14 21 -6 5 double[] sayilar; sayilar = new double[5]; -3.4 12.5 27.0 1.1 25.33 VERİ YAPILARI 01 Java Temel Kavramlar 46 Diziler - II Diziler, temel veri tipi listesi veya referans listesi içerebilirler. Diziler, köşeli parantezlerle ifade edilirler : [] Köşeli parantezler veri tipinden sonraya yerleştirildiğinde, tüm değişkenleri dizi olarak tanımlar: int[] sayilar, numaralar; Köşeli parantezlerin değişkenden sonraya yerleştirilmesi sadece o değişkeni dizi yapar: int sayilar[], sayac; VERİ YAPILARI 01 Java Temel Kavramlar 47 Diziler - III Diğer referans tipleri (nesneler) gibi diziler de, ya bazı verileri gösteriyordur veya hiçbir yere işaret etmiyordur. Hiçbir yeri göstermiyorsa, int sayilar[] = null; şeklinde olduğu gibi tanımlanmalıdır. Bellekten 15 tamsayılık yer ayırmak için : sayilar = new int[15]; şeklinde kullanılabilir. “new” operatöründen sonraki veri tipi, tanımlı değişkenin veri tipi ile aynı olmalıdır. Java dizinin her elemanına default olarak 0 değerini atar. VERİ YAPILARI 01 Java Temel Kavramlar 48 DİZİ KULLANIM ÖRNEKLERİ dizi[2]++; dizi[3]=dizi[1]+dizi[2]; System.out.println(dizi[5]); Dizi elemanlarının toplamını bulduran programı yazınız : dizi.length kullanınız! VERİ YAPILARI 01 Java Temel Kavramlar 49 İKİ BOYUTLU DİZİLER (MATRİSLER) tablo • MxN • M satır, N sütun M=4 0 1 2 2 15 9 0 21 33 8 1 3 17 61 2 89 3 5 3 N=3 • Oluşturulması : int[][] tablo = new int[4][3]; • Kullanımı : tablo[0][2] VERİ YAPILARI 01 Java Temel Kavramlar 50 ÇOK BOYUTLU DİZİLER • Tip []…[] isim = new tip[büyüklük1]...[büyüklükN] • Tip isim[]…[] = new tip[büyüklük1]...[büyüklükN] Örnek : float cbDizi[][][][]; // 4 boyutlu dizi cbDizi = new float[3][4][2][6]; VERİ YAPILARI 01 Java Temel Kavramlar 51 STRING’LER ve KARAKTER DİZİLERİ • Karakter dizisi : Karakterlerden oluşan dizidir. char harfDizi[] = { ‘T', 'e', ‘s', ‘t' }; for(int i=0; i<harfDizi.length;++i) System.out.println(harfDizi[i]); • String : Karakter dizisinden farklıdır. Çok sayıda metot içerir. Java’nın String sınıfı kullanılır. String str = "Merhaba"; System.out.println(str); str = new String(harfDizi); System.out.println(str); VERİ YAPILARI 01 Java Temel Kavramlar 52 Dizilerden Oluşan Diziler int[][] list = new int[10][]; list[0] = new int[5]; list[1] = new int[10]; list[1][6] = 23; list[0][6] = 23; /* Hata! Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6 at Ornek3.main(Ornek3.java:34) */ VERİ YAPILARI 01 Java Temel Kavramlar 53 Bölüm 5 METOTLAR BÖL ve ÇÖZ (Divide and Conquer) • Yazılım Mühendisliği deneyimleri, büyük programlar geliştirmenin en iyi yolunun küçük program parçaları (modül) yazıp onları birleştirmek olduğunu göstermiştir. • Böl ve Çöz olarak bilinen bu yöntem aynı zamanda, hatalardan arındırmayı, programı gelişen şartlara göre büyütmeyi, değişiklikler yapmayı kolaylaştırmak ve anlaşılırlığı artırmak gibi birçok avantajı da beraberinde getirmektedir. • Java’da temel modüller, sınıf (class) ve metotlardır (method). Metotlar yazılım içinde yeniden kullanılarak kodu ve yazılım geliştirme süresini kısaltmaktadır. VERİ YAPILARI 01 Java Temel Kavramlar 55 METOTLAR (METHOD) • Bir işlemin yapılması için bir veya daha fazla ifade kullanmak gerekir. Verilen bir matrisi ekrana yazdırmak gibi. İlgili kodu “yazdir()” adını verdiğimiz bir metot içine yazarak istediğimiz zaman, ismi ile çağırabiliriz. • Java, matematik hesaplamalarını, string, karakter, girdi/çıktı işlemlerini ve diğerlerini yapmak için hazır sınıflar ve metotlar içermektedir. Ayrıca değişik alanlarda hazırlanmış veya kendimizin daha önceden hazırladığı metotları da kullanmak mümkündür. • Hazır veya kullanıcı tanımlı paketleri, import java.util.Random; import java.util.*; biçimlerinde görüldüğü gibi “import” kullanılarak yüklenirler. VERİ YAPILARI 01 Java Temel Kavramlar 56 Java Paketleri • Hazır Java paketleri içerisinde, birçok sınıf mevcuttur. java.applet Java.net java.awt Java.text java.awt.event Java.util java.io Java.swing Java.lang Java.swing.event … • Java.lang paketi, Java’da çok kullanılan sınıfları içerir. Bu paketteki java.lang.Math sınıfı içerisinde bulunan bazı sahalar ve metotlar sonraki slaytlarda gösterilmiştir. (Sadece “lang” paketine özgü olarak, kullanıcının getirme “import” zorunluluğu yoktur) VERİ YAPILARI 01 Java Temel Kavramlar 57 Field Summary static double E static double PI Method Summary static double abs(double a) Returns the absolute value of a double value. static float abs(float a) static int abs(int a) Returns static long abs(long a) Returns the absolute value of a float value. the absolute value of an int value. Returns the absolute value of a long value. static double acos(double a) Returns the arc cosine of a value; the returned angle is in the range 0.0 through pi. static double asin(double a) Returns the arc sine of a value; the returned angle is in the range -pi/2 through pi/2. static double atan(double a) Returns the arc tangent of a value; the returned angle is in the range pi/2 through pi/2. static double atan2(double y, double x) Returns the angle theta from the conversion of rectangular coordinates (x, y) to polar coordinates (r, theta). static double ceil(double a) Returns the smallest (closest to negative infinity) double value that is greater than or equal to the argument and is equal to a mathematical integer. static double cos(double a) Returns the trigonometric cosine of an angle. static double exp(double a) Returns Euler's number e raised to the power of a double value. static double floor(double a) Returns VERİ the largest (closest to positive infinity) double value that is YAPILARI less than or equal to the argument and is equal to a mathematical integer. 01 Java Temel Kavramlar 58 Hazır java.lang.Math sınıfının bazı metotları static double log(double a) Returns the natural logarithm (base e) of a double value. static double log10(double a) Returns the base 10 logarithm of a double value. static double max(double a, double b) Returns the greater of two double values. static double min(double a, double b) Returns the smaller of two double values. static double pow(double a, double b) Returns the value of the first argument raised to the power of the second argument. static long round(double a) static double sin(double a) Returns the trigonometric sine of an angle. static double sqrt(double a) double value. static double tan(double a) Returns the closest long to the argument. Returns the correctly rounded positive square root of a Returns the trigonometric tangent of an angle. static double toDegrees(double angrad) Converts an angle measured in radians to an approximately equivalent angle measured in degrees. static double toRadians(double angdeg) Converts an angle measured in degrees to an approximately equivalent angle measured in radians. http://java.sun.com/javase/6/docs/api/java/lang/Math.html VERİ YAPILARI 01 Java Temel Kavramlar 59 METOTLARIN GENEL BİÇİMİ erişim dönüş_tipi isim(parametre listesi) { metodun gövdesi } Erişim : public, private gibi Dönüş_tipi : metodun döndürdüğü veri tipi. Değer döndürmüyorsa void. Parametre listesi : “,” lerle ayrılmış tip ve parametre ismi. VERİ YAPILARI 01 Java Temel Kavramlar 60 Değer Döndürmeyen Metotlar void metotları public void yazdir() { System.out.println("Merhaba"); } Çağrılması : yazdir(); VERİ YAPILARI 01 Java Temel Kavramlar 61 Değer Döndüren Metotlar public int topla(int a, int b) { return (a+b); } Çağrılması : int y=topla(5,6); Metodun iki de parametresi var. VERİ YAPILARI 01 Java Temel Kavramlar 62 Parametre, Argüman, Return Argüman : Metoda aktarılan değer Parametre : Argümanı kabul eden değişken Return : Metottan çıkmak veya geri dönmek VERİ YAPILARI 01 Java Temel Kavramlar 63 Değişkenlerin Kapsama Alanı { … int x = 5; if(sayi>5) { int y = 12; … y değişkeninin tanımlı olduğu bölge } // y tanımlı değil // x tanımlı } for(int i=0; i<5; ++i) System.out.println(i); i=10; // Hatalı! VERİ YAPILARI 01 Java Temel Kavramlar 64 Metotlar – Örnek 1 int dizi[] = { 5,6,7,8 }; veya benzer şekilde verilen bir tamsayı dizisinin elemanlarının toplamını bulan metodu içeren java programını yazınız. class DiziTopla { public static void main(String args[]) { int dizi[] = { 5,6,7,8 }; System.out.println(topla(dizi)); } public static int topla(int dizi[]) { int toplam = 0; for(int i=0; i<dizi.length; ++i) toplam+=dizi[i]; return toplam; } } VERİ YAPILARI 01 Java Temel Kavramlar 65 Metotlar – Örnek 2 class Ornek2 { public static void main(String args[]) { String str = "test"; nyazdir(str,10); } public static void nyazdir(String str, int n) { for(int i=0; i<n; ++i) System.out.println(str); } } VERİ YAPILARI 01 Java Temel Kavramlar 66 Metotlar – Örnek 3 Faktöriyel class Ornek3 { public static String f(int n) { int carpim = 1; if (n<0) return "Invalid Input For Function"; else for(int i=1; i<=n;++i) carpim*=i; return ""+carpim; Sayı döndüren } public static void main(String args[]) { int sayi = 5; System.out.println(f(sayi)); } faktöriyel fonksiyonunu yazınız. } VERİ YAPILARI 01 Java Temel Kavramlar 67 Geliştirilmiş for (enhanced for) Java 5.0 ile gelen bir özelliktir. For ( parameter : arrayName) Statement İki parçadan oluşur : • Type and identifier : “int sayi” gibi • arrayName : dolaşılacak (iterate) dizi Ayrıca, diziler dışında koleksiyonların da dolaşılmasını sağlar. VERİ YAPILARI 01 Java Temel Kavramlar 68 Varargs Varargs (Variable arguments), bir metodun değişken sayıda parametre alabilmesidir. Java 5.0'ın sunduğu kolaylıklardan biridir. Aynı amaçla dizi de kullanılabilir ama elemanları diziye yerleştirmekten kurtarır. Değerler metot içine dizi olarak gelir. Bir metotta sadece 1 varargs bulunabilir. class DegSayParametre { public static void merhabalar(String... names) { for (String name : names) { System.out.println("Merhaba " + name); } } public static void main(String[] args) { merhabalar("Ali", "Veli", "Ayse"); } } VERİ YAPILARI 01 Java Temel Kavramlar Merhaba Ali Merhaba Veli Merhaba Ayse 69