69
Veri Yapıları – 2009 Java Programlama Diline Giriş Yrd. Doç. Dr. Aybars UĞUR

Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

Veri Yapıları – 2009Java Programlama Diline Giriş

Yrd. Doç. Dr. Aybars UĞUR

Page 2: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

Bölüm 1

GİRİŞ

Page 3: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

3

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. James Gosling, Haziran 1991’de “Oak” adıyla geliştirmiştir.

• 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.

Page 4: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

4

Önemli Java Gerçekleştirimleri

Generic yapılar, Autoboxing/Unboxing

Gelişmiş for döngüsü, Varargs (Değişken sayıda argüman)

J2SETiger

J2SE 5.0(2004)

J2SE (Java 2 Platform, Standard Edition)J2EE (Java 2 Platform, Enterprise Edition) J2ME (Java 2 Platform, Micro Edition).

J2SE

Java 2

J2SE 1.2(1998)

İlk sürümJava 1.0JDK 1.1 (1995)

AçıklamaAdSürüm

J2SE 6 (2006 sonu) : MustangJ2SE 7 (Ağustos 2006-2010) : Dolphin

Son gelişmeler için : http://en.wikipedia.org/wiki/Java_version_history

Page 5: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

5

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.

Page 6: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

6

İlk Java Programı

Prog1 adlı java programı :

ekrana merhaba yazdırmaktadır.

class Prog1

{

public static void main(String args[])

{

System.out.println("Merhaba");

}

}

Page 7: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

7

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.

Page 8: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

8

Java Programının Çalıştırılması

class Prog1

{

public static void main(String args[]) {

System.out.println("Merhaba");

}

}

Kaynak Kod Prog1.java

> javac Prog1.java

.. .. .. ..

.. 80 1a ..

.. .. .. ..

Byte KodProg1.class

DERLEMEjavac derleyicisi

.. .. .. ..

.. 80 1a ..

.. .. .. ..

Byte KodProg1.class ÇALIŞTIRMA

java yorumlayıcısı

> java Prog1> Merhaba

JVM tarafından yorumlanabilir.

JVM’i (Java Virtual Machine) açmak üzere Java komutu kullanıldığında işletilen bilgisayar programına Java uygulaması (application) denilir.

Page 9: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

9

Entegre Geliştirme Ortamları

• Programların IDE (Integrated DevelopmentEnvironment) 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/) …

Page 10: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

Bölüm 2

JAVA’daVERİ TİPLERİ

Page 11: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

11

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.

Page 12: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

12

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

Page 13: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

13

Temel Veri Tiplerinin Sınırları

• Tamsayıların Sınırları

• Ondalıklı Sayıların Sınırları

Page 14: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

14

Java’nın 8 Temel Veri TipiType Size in bits Values Standard boolean 8 true or false

char 16 ’\u0000’ to ’\uFFFF’ (ISO Unicode character set)

byte 8 –128 to +127

short 16 –32,768 to +32,767

int 32 –2,147,483,648 to +2,147,483,647

long 64 –9,223,372,036,854,775,808 to

+9,223,372,036,854,775,807

float 32 –3.40292347E+38 to

+3.40292347E+38

(IEEE 754 floating point)

double 64 –1.79769313486231570E+308 to

+1.79769313486231570E+308

(IEEE 754 floating point)

• java.lang.Byte• java.lang.Short• java.lang.Integer• java.lang.Long

• java.lang.Float• java.lang.Double

• java.lang.Character• java.lang.Boolean

Sarmalayıcı (Wrapper) Sınıflar

Page 15: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

15

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.

Page 16: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

16

İ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önetim-denetim mekanizması kullanılması gerekir.

Page 17: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

17

8 Bitlik İkinin Tümleyeni Tamsayılar

A two's-complement system ortwo's-complement arithmetic is a system in which negativenumbers are represented by thetwo's complement of the absolutevalue.

this system is the most commonmethod of representing signedintegers on computers. In such a system, a number is negated(converted from positive tonegative or vice versa) bycomputing its two's complement.

Sınırları : [-2N-1 … 2N-1-1]

Pozitif Sayılar doğal şekildedir:

Page 18: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

18-1281000 0000---

-1271000 00011000 00000111 1111127

-1261000 00101000 00010111 1110126

-1251000 00111000 00100111 1101125

-1241000 01001000 00110111 1100124

¯¯

-51111 10111111 10100000 0101+5

-41111 11001111 10110000 0100+4

-31111 11011111 11000000 0011+3

-21111 11101111 11010000 0010+2

-11111 11111111 11100000 0001+1

---0000 00000

Decimaladd 1 for

Twos

Complement

Invert8 bit BinaryDecimal

Java Byte Data Type

Page 19: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

19

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.

Page 20: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

20

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 8 bit 23 bit

İşaretsign

Üsexponent

Anlamlı Kısımfraction

Page 21: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

21

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

Sayıyı olağan duruma getirirsek : 110,011 = 1,10011x22

Sayı > 0 olduğundan işaret biti : 0Sayının üst değerinin saptırılmış hali : 2+127 = 129 → 12910 = 100000012

Anlamlı kısım : 10011000000000000000000Sayı son olarak : 0 10000001 10011000000000000000000 şeklinde ifade edilir.

0,375 = (0,011)2 → 6,375 = (110,011)2

Page 22: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

22

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 bitsof the fraction). Therefore, 1 ≤ m < 2. (1+fraction)

0 10000001 10011000000000000000000v = +1 * 22 * (1,10011)2 = 6,375

1+ 0,5+ 0,0625+ 0,03125 = 1,59375

Page 23: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

23

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 11 bit 52 bit

İşaretsign

Üsexponent

Anlamlı Kısımfraction

Page 24: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

24

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;

Page 25: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

25

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.

Page 26: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

26

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 */

Page 27: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

27

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);

Page 28: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

28

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

Page 29: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

29

OPERATÖRLER - I

Hesaplamalarda kullanılan operatörler :

Aritmetik : +, -, *, /, % (Mod, kalan), ++, --

Mantıksal : &&, ||, !, &, |, .....

İlişkisel :

== (eşittir)

!= (eşit değildir)

>, <, >=, <=

Page 30: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

30

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

Page 31: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

31

Operatörler ve Öncelik Sırası

Gruplama Operatorler

Postfix [] . (params) exp++ exp-- Unary ++exp --exp +exp -exp ~ ! Creation, cast new (type)exp Multiplicative * / % Additive + - Shift << >> >>> Relational < > <= >= instanceof Equality == != Bitwise AND & Bitwise EXOR ^ Bitwise OR |

Logical AND && Logical OR || Conditional ?: Assignment = *= /= %= += -= >>= <<= >>>=

&= ^= |=

Page 32: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

Bölüm 3

YAPISAL PROGRAMLAMA ve DENETİM YAPILARI

Page 33: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

33

YAPISAL PROGRAMLAMA

Yapısal Programlamada üç tür denetim yeterlidir:

• Sıra (Sequence)

• Seçim (Selection)

• Tekrar (Repetition)

Sıralı işletim ?

Page 34: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

34

PROGRAM DENETİM YAPILARI

• SEÇİM YAPILARI– if– if/else– switch

• TEKRAR YAPILARI (Döngüler)– while– do/while– for

Page 35: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

35

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++; };

Page 36: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

36

SEÇİM YAPILARI : IF/ELSE

if (koşul) ifade;

else ifade;

if(notu>=60)

System.out.println("Gecti");

else

System.out.println("Kaldı");

Page 37: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

37

CONDITIONAL OPERATOR (?:)

System.out.println(notu>=60? "Geçti":"Kaldı");

Eşdeğer ifade :

if (notu>=60)System.out.println("Geçti");

elseSystem.out.println("Kaldı");

Page 38: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

38

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);

Page 39: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

39

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;

Page 40: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

40

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

}

Page 41: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

41

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++; };

Page 42: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

42

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.

Page 43: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

43

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);

}

Page 44: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

44

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.

Page 45: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

Bölüm 4

DİZİLER

Page 46: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

46

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};

double[] sayilar; sayilar = new double[5];

5 7 12 2 9 8 14 21 -6 5

-3.4 12.5 27.0 1.1 25.33

0 1 2 3 4 5 6 7 8 9

Page 47: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

47

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;

Page 48: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

48

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.

Page 49: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

49

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!

Page 50: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

50

İKİ BOYUTLU DİZİLER (MATRİSLER)

• M x N • M satır, N sütun

• Oluşturulması : int[][] tablo = new int[4][3];• Kullanımı : tablo[0][2]

5389

61173

83321

9152

tablo

M=4

N=3

3

2

1

0

210

Page 51: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

51

Ç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];

Page 52: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

52

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);

Page 53: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

53

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) */

Page 54: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

Bölüm 5

METOTLAR

Page 55: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

55

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.

Page 56: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

56

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.

Page 57: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

57

Java Paketleri

• Hazır Java paketleri içerisinde, birçok sınıf mevcuttur.

• 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)

Java.swing.event …Java.lang

Java.swingjava.io

Java.utiljava.awt.event

Java.textjava.awt

Java.netjava.applet

Page 58: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

58

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) Returns the absolute value of a float value.

static int abs(int a) Returns the absolute value of an int value.

static long abs(long a) 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 the largest (closest to positive infinity) double value that is

less than or equal to the argument and is equal to a mathematical integer.

Page 59: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

59

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) Returns the closest long to the argument.

static double sin(double a) Returns the trigonometric sine of an angle.

static double sqrt(double a) Returns the correctly rounded positive square root of a

double value.

static double tan(double 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

Page 60: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

60

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.

Page 61: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

61

Değer Döndürmeyen Metotlarvoid metotları

public void yazdir() {

System.out.println("Merhaba");

}

Çağrılması :

yazdir();

Page 62: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

62

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.

Page 63: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

63

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

Page 64: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

64

Değişkenlerin Kapsama Alanı

{…int x = 5; if(sayi>5){

int y = 12;…

}// y tanımlı değil// x tanımlı}

for(int i=0; i<5; ++i)System.out.println(i);

i=10; // Hatalı!

y değişkeninin tanımlı olduğu bölge

Page 65: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

65

Metotlar – Örnek 1int 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;

}}

Page 66: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

66

Metotlar – Örnek 2class 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);

}}

Page 67: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

67

Metotlar – Örnek 3Faktöriyel

class Ornek3{

public static String f(int n){

int carpim = 1;if (n<0) return "Invalid Input For Function";elsefor(int i=1; i<=n;++i)

carpim*=i;return ""+carpim;

}

public static void main(String args[]){

int sayi = 5;System.out.println(f(sayi));

}}

Sayı döndüren faktöriyel fonksiyonunu yazınız.

Page 68: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

68

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.

Page 69: Veri Yapıları – 2009 Java Programlama Diline Giri şugur/09_10_Fall/DS/01_JavaIntro.pdf · 2009-09-16 · • JVM (Java Virtual Machine) veya Java Sanal Makinesi: Java’nın

VERİ YAPILARI 01 Java Temel Kavramlar

69

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 varargsbulunabilir.

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");

}

}

Merhaba AliMerhaba VeliMerhaba Ayse