Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Sayısal Türler Tamsayılar (byte, short, int, long)

Benzer bir sunumlar


... konulu sunumlar: "Sayısal Türler Tamsayılar (byte, short, int, long)"— Sunum transkripti:

1 Sayısal Türler Tamsayılar (byte, short, int, long)
Tam sayılardır exact Yaklaşık olarak ~1019 rakamında sınırlıdır Kayan noktalı (float, double) kesirli Genelde yaklaşma ( ) Yaklaşık olarak ~ rakamında sınırlıdır

2 Veri Türlerinin Listesi
Temel Türler Default Value boolean false char '\u0000' (null) byte (byte) 0 short (short) 0 int long L float f double d void N/A Note: “Void “ C/C++ dillerindeki gibi temel bir tür değildir. Java ‘da void türüne doğru bir tür değişimi yapılamaz.

3 Veri Türlerinin Değer Sınırları
Boyut En az En fazla Varsayılan boolean 1 false* true* false char 16 '\u0000' (null) byte 8 -128 127 (byte) 0 short 16 -32,768 32,767 (short) 0 int 32 -2,147,483,648 2,147,483,647 long 64 -9,223,372,036,854,775,808 9,223,372,036,854,775,807 0L float 32 Yaklaşık olarak ±3.4E+38 ve 7 haneli 0.0F double 64 Yaklaşık olarak ±1.7E+308 ve 15 haneli 0.0D void * En az ve en fazla gibi durumlar geçerli değildir.

4 Tür Dönüşümü (Casting)
Bir önceki derste tür dönüşümü ile ilgili temel birkaç şey gördük. Bazen açık tür dönüşümü gerekebilir bazen de gerekmez. Doğru ! derlenir HATA Açık tür dönüşümü gereklidir float f2 = f; int y = f2; int x = 10; float f1 = x; Derlenebilmesi için hangisinde tür dönüşümüne ihtiyaç vardır? Neden?

5 Tür Dönüşümü (Devam) Tür dönüşümünün ne zaman gerekli olduğunu anlayabilmek için aşağıdaki örneğe bakalım. Aşğıdaki gibi iki ayrı türden iki adet değişkenimiz olsun: int x; char c; Asıl soru, Bu veri türlerinin bellekte kapladığı alan ne kadardır?

6 Recall java int Besin değerleri tahıl kutusu Kalori değeri 0
Daha önce Java ‘daki veri türlerinin bellekte kapladığı alanları gördük. Her tamsayı (int) türünde tanımlanmış bir değişken için bellekten 4 baytlık yer ayrılır. Bize ayrılan yeri bir kutu gibi düşünebilirsiniz. tahıl kutusu Besin değerleri Servis miktarı 1 int Her serviste ikram edilen Kalori değeri 0 % günlük miktar Toplam bayt sayısı % java int

7 And recall... Besin değerleri
Karakter türünde tanımlanmış bir değişken için 2 bayt alan tahsis edilir . Tamsayı (int) türüne göre daha az bir alandır. Dolayısıyla bunu daha küçük bir kutu olarak düşünebiliriz. Besin değerleri Servis miktarı 1 char Her serviste ikram edilen Kalori değeri 0 % günlük miktar Toplam bayt sayısı % Ton balığı konservesi java char

8 Her bir blok 1 bayt temsil eder
Öyleyse... Bir karakter yani char veri türü 2 bayt, ve bir tamsayı yani int türü 4 bayt yer kaplar. Dolayısıyla aşağıdaki kodu incelersek: int x; char c; Aşağıdaki şekle bakarsak: Değişken Belleğin resmi x Her bir blok 1 bayt temsil eder c

9 Gerçeklik kontrolü java int
Konserve kutusu tahıl kutusunun içine sığabilir mi? Evet, küçük olduğu için sığar. Peki, tahıl kutusu konserve kutusunun içine sığabilir mi? Düzgün bir şekilde mümkün değil, çünkü tahıl kutusu daha büyüktür. java int java char

10 Aynı mantıkla... char türündeki bir değer int türündeki bir alana sığar mı? int türündeki bir değer char türündeki bir alana sığar mı? Değişken Belleğin Resmi x c

11 Gerçeklik kontrolü java int
Peki tahıl kutusunun yarısını konserve kutusuna yerleştirmek istersek mümkün mü? İşte bu olur ! Örneğin, eğer tahıl kutusunun yarısının boş olduğunu biliyorsak o boş kısmı atabiliriz. java int java char

12 Açık tür dönüşümü: Kasıtlı olarak yapılan duyarlılık kaybı
int x = 45; char c = ‘A’; c = (char) x; // tür dönüşümü gereklidir Değişken Belleğin resmi x Tür dönüşümü gerekli! c

13 Kendinizi sınayın Boşlukları doldurun.
Eğer aşağıdakileri uygularsak ne olur: int someInt = 2000; long longNumber; longNumber = (long) someInt; Bu tür değişimi kurallara uygun mudur? Öyleyse gerek var mıdır?

14 Eğer beklenen değer bu değilse,
Diğer bir örnek Sonuç 4 olur, çünkü yapılan tamsayı bölmesi sonucu kesirli kısım budanır! float f; int i, j; i = 9; j = 2; f = i / j; Eğer beklenen değer bu değilse, 3 türlü çözüm vardır f = (float) i / j; f = i / (float)j; f = (float) i / (float) j;

15 Diğer bir örnek Dikkat etmemiz gereken diğer bir husus tür dönüşümü yapılırken Java ‘nın tür dönüşümü yapılan değerin işaretini korumasıdır. int türü için ayrılan 4 bayt ‘lık alanı düşünelim. En yüksek anlamlı bit işaret biti olarak kullanılır. 0 ise pozitif, 1 ise negatif anlamına gelir. int İşaret biti Veri için 31 bit ayrılır

16 Tür dönüşümü ve işaret İşaret bitini korur
Tür dönüşümü sadece bir veri türünü diğerine dönüştürürken bir kısmını budamaktan ibaret değildir. Orjinal işaret neyse o korunur. İşaret bitini korur bayt int

17 Diğer bir örnek Elimizde çok eskiden kalma, tarih bilgisinin tamsayı (int yani 4 bayt) şeklinde ifade edildiği bir veri olduğunu kabul edelim, şu şekilde: 1929 10 (ekim) 31 Bu çok kabaca, fakat eskiden kalma veri kaynakları bu formatta verilere sahiptir.

18 public static void main(String[] args) {
public class CutData { public static void main(String[] args) { int iDate = ; // eskiden böyleydi byte byDay = (byte) (iDate % 100); System.out.println (“Gün " + byDay); iDate = iDate / 100; byte byMonth = (byte) (iDate % 100); System.out.println (“Ay " + byMonth); short sYear = (short) iDate; System.out.print (“Yıl = " + sYear); } } // Veriyi parçalara ayırdık Açık tür dönüşümü gerekli

19 Ters yönde çalışırsak yani byte veya short türündeki bir veriyi int türündeki bir alana aktarmak istersek tür dönüşümü gerekli değildir çünkü herhangi bir duyarlılık veya veri kaybı olmaz. public class PackDate { public static void main(String[] args) { byte month = 12; byte day = 25; short year = 2000; int date = year * month * day; System.out.println ("The date = " + date); } } // PackDate

20 Tür dönüşümü: Bilginizi sınayın
Verilenler: int start = 10; float temp = 5.5f; temp = (int) temp * start; temp değişkenin değeri şimdi ne oldu? Verilenler: char c = ‘A’; int x; c = x; Kurallara uygun mudur? Hızlı tekrar

21 Bilginizi sınayın 3 4 1 2 Hızlı tekrar İşte problem:
int iVar = 10; float fVar = 23.26f; // derleme zamanı hatası verir iVar = iVar * fVar Hangi çözüm en iyi çalışır? 3 iVar = iVar * (int) fVar 230 4 iVar = (int) ((float) iVar * fVar) 1 iVar = (int) (iVar * fVar) 232 232 2 Hızlı tekrar iVar = (int) iVar * fVar Aynı derleme hatası

22 Kısayol operatörleri counter = counter + 1; VEYA counter++;
counter = counter * 5; VEYA counter*=5; Son iki örnekte : İlk önce artırma ve çarpma işlemleri yapılır daha sonra atama işlemi yapılır. Hızlı tekrar Bu ifadeleri anlayın fakat kullanmamaya çalışın

23 The Short End of Shorthand
Akıllı ifadeleri kısayol operatörlerle birlikte kullanırken dikkatli olun. Örneğin, “_” gibi bir değişken tanımlayabiliriz. Alt çizgi karakteri geçerli bir değişken ismidir. int _ = 1; Aşağıdaki gibi Morse kodu oluşturacak şekilde değişik karakterlerin kombinasyonundan oluşan bir değişken ismi de oluşturabiliriz: _ -= --_ - _--; Evet, yukarıdaki ifade geçerlidir, ancak tamamen anlamsız ve okunamaz bir ifadedir.

24 Dokümantasyon ve Açıklamalar
Hızlı Tekrar Üç çeşit yöntem vardır: // satır sonuna kadar olan her şeyi açıklama olarak kabul eder /* ve */ işaretleri arasında kalan tüm ifadeler satır sonu gözetmeksizin açıklama olrak kabul edilir. /** * Bu sentaks biçimi Javadoc açıklamaları için kullanılır, * HTML biçimlendirme özelliklerini sunar. */ BİLM 217 için, Javadoc açıklamalarını kullanın Javadoc örneği üzerinde çalışalım

25 Javadoc: Basit bir örnek
import java.util.*; /** * HelloComments.java * * Created: Wed Jan 12 18:17: David Dagon 98 beta */ public class HelloComments { * Basit <b> bir </b> değişken. public int x = 10; Javadoc açıklamaları değişiklik yapılan öğenin üzerinde yer almalıdır. Sınıf açıklamaları yapılacağı zaman açıklamaları import ifadelerinin altına koymak gerekir. HTML terimleri!

26 Basit bir örnek (devam)
/** * This comment is reproduced twice, because * of the comma delimited declaration of ints. * The solution would be to use separate lines * for each declaration. */ public int y = 4, z = 11; * Bu sınıf çalıştırılırsa Main metodu programın * başlangıç noktasıdır. * @param args Komut satırından girilen parametreler public static void main(String[] args) { } } // HelloComments Short, one-liner, followed by period Sadece değişken isimlerini belirtin.

27 Javadoc (devam) HTML etiketleri ekleyebilirsiniz fakat <H1> gibi yapısal etiketler kullanmaktan kaçının. Javadoc comments should immediately preceed the declaration of the class, field or method. İlk cümle özet olmalıdır. Javadoc ‘a özel etiketler kullanın, örneğin . etiketi kullanılırsa diğer etiketine kadar parse işlemi devam eder. @see <class name> @see <full-class name> @see <full-class name#method.name> @version Kendi javadoc açıklamalarınıza geri dönerseniz bu notlara geri dönersiniz. @author @param @return @exception @deprecated // jdk @since // jdk 1.1 @serial // jdk 1.2

28 Sorular?

29 Sabitler Hızlı tekrar Java:
public final static <tür> <IDer> = <değer>; public final static int MIN_PASSING = 60; public final static float PI = f; Neden bu sentaks kullanıldığı konusunda detaylı bilgi ileride...

30 Printing to Screen Quick Review Java:
System.out.println(<argüman>); System.out.println( ); // boş satır ekler System.out.println(5); // ekrana 5 yazar System.out.println(“Merhaba Dünya”); // ekrana Merhaba Dünya yazar “println” vs. “print” : println komutu ekrana mesajı bastıktan sonra imlecin bir alt satırın başına geçmesini sağlar print komutu ise ekrana mesajı bastıktan sonra imlecin kaldığı yerden devam etmesini sağlar Quick Review

31 Metod Çılgınlığı

32 Dikkat Java ‘daki metodları konuşmaya başlamadan önce yüksek seviyeli programlama dillerine bir göz atmamız gerekir. Slaytlardaki sentaks konusunda endişelenmeyin. Büyük resimde kod detayları önemli değildir önemli olan neyin önemli olduğudur.

33 Programlama Modelleri
Prosedürel Programlama (Procedural Programming) ‘Imperative’ assignment used to create state, and procedures manipulate state. E.g., C, Assembly, Pascal int y; int x = 3; y = manipulateData(x); Fonksiyonel Programlama (Functional Programming) Functions (procedures that do not depend on outside data) are used to provided data. E.g., Lisp. (defun check-member (input-item input-list) (cond ((null input-list) nil) ((equal input-item (first input-list)) T) (T (check-member input-item (rest input-list)))))

34 Programlama Modelleri
Nesneye yönelik programlama Bütün veriler objelerin içinde tutulur; bütün etkileşim objeler arasında olur. Even numbers are objects that know how to add themselves. E.g., SmallTalk: | array | array := Array new: 5. rect := corner: 1 to: array size do: [ :item | rect origin: array at: item put: rect copy ]. Java ‘nın yeri neresidir? Nesneye yöneliktir ancak %100 değildir çünkü, temel veri tiplerine sahiptir ve de az da olsa prosedürel programlamaya izin verir. Başka modeller de mevcuttur ancak, bu üçü Java ‘nın nereden geldiğini açıklamaya yeter

35 Java Metodları { System.out.println(“Hello World!”);
Java ‘da hem prosedürler hem de fonksiyonlar için method adı verilen bir yapı mevcuttur: aşağıda prosedür geriye değer döndürmediği için metod adından önce “void” ifadesi kullanılmıştır. public void printHelloWorld( ) { System.out.println(“Hello World!”); } // printHelloWorld Not: Bütün metodlar, parametre almasa dahi metod isminden sonra ( ) kullanmak zorundadır. Açıklamayı not edin

36 Java Metodları hem prosedürler hem de fonksiyonlar için tek bir yapı:
fonksiyon tanımlaması yapıldığı zaman geri dönüş değerinin türü belirtilmesi gerekir. public float average (float num1, float num2, float num3) { float answer; answer = (num1 + num2 + num3)/ 3; return (answer); } // of average

37 Metod Yazımı : Büyük Bakış
Java kuralı: --Her metod bir nesneye aittir ya da bir sınıfa. --Bir metod çağrıldığı zaman hangi sınıfa ya da nesneye ait olduğu kesin belli olmalıdır. --Bir uygulamayı çalılştırabilmek için programın aynı adında bir sınıf ve bu sınıfın içinde de main metodu bulunmalıdır. Komut satırı parametreleri için Herkese açık Geri dönüş değeri yok public static void main (String[ ] argv) Sınıf metodu olduğunu belirtir, üye metodu değil Metod adı

38 public static void main(... }
class A { public static void main(... } Öyleyse, her sınıf kendi main metoduna sahip olabilir. Bunlardan hangisinin çalışacağına siz karar vereceksiniz. Debug testi yapmak için gerekli olan main metodlarını yazmayı öğrendiğimiz zaman yukarıda bahsettiğimiz konu kritik bir hal alacak. class B { public static void main(... } class C { public static void main(... }

39 Metod İmzaları “Metod imzası, metod adı, parametre sayısı ve türleridnen oluşur. Herhangi bir sınıf aynı imzaya sahip iki metod tanımlayamaz, yoksa derleme zamanı hatası oluşur. Aynı isme sahip metodlar farklı varyasyonlarda parametrelere sahip olurlarsa Method overloading meydana gelir. public int getCube(int num){ return num*num*num; } public int getCube(float num){ return (int)(num*num*num); public int getCube(double num){ return (int) (num*num*num);

40 Metodlarda yapılan genel hatalar
public float average (float num1, float num2, float num3); { float answer; answer = (num1 + num2 + num3)/ 3; return (answer); } // average ‘;’ Noktalı virgül hakkında -- Eğer yukarıdaki gibi bir kullanım söz konusu olursa metod abstract metod gibi görünebilir. -- Çözümlenmesi zor bir hata mesajı ile karşılaşılabilir. -- Çok kolay yapılan hatalardan biridir.

41 Metotlar nereye? Tıpkı main metodunda olduğu gibi oluşturulan bütün metodlar bir sınıfa ya da bu sınıfın bir üyesine ait olmalıdır. Daha sonra nasıl sınıf ve nesne oluşturulur göreceğiz... Şimdilik, metodların bir sınıfa ait olması gerektiğini bilmeniz yeter.

42 Nesneye Yönelik Programlama Hakkında
Nesneye yönelik programlama ile ilgili önemli noktaları görmüş olduk : Veri ve metodlar birlikte bir sınıfa aittir. Şu anda sadece, değişkenlerin ve metodların sınıflara ait olduğunu bilmeniz yeterli. Daha sonra, bu özelliği kullanarak durumları (değişken), davranışlarla (behaviour) nasıl sarmalanır göreceğiz... Öyleyse, bugün neler öğrendiğimizi hatırlayalım. Nesneye yönelik programlamanın temel taşlarını öğrenmeye başladınız.

43 Sorular?

44 Koşullu ifadeler

45 Karar ifadeleri Java: Ya da: if (koşul) tek bir ifade; else {
bir ya da daha fazla ifade; } bir ya da dah fazla ifade;

46 Örnekler Java: Aşağıdaki örnekte ne yapılmıştır? int testGrade = 65;
boolean passing = true; if (testGrade < 60) passing = false; System.out.println(testGrade + ”notu geçer demek” + passing + ”olur”);

47 Boole ve İlişkisel operatörler
Boole: Java: VE && VEYA || DEĞİL ! İlişkisel: eşittir == eşit değildir != küçüktür < küçük ya da eşittir <= büyüktür > büyük ya da eşittir >= Not: Atama =

48 Örnek if (enrolled && passing) { // etc. }
Java, şartlardan sadece bir tanesinin değerlendirilmesi gibi bir imkan da sunar. Eğer ilk şart doğruysa, ikinci şarta bakılmaksızın toplam koşul doğru kabul edilir ve değerlendirme sona erer. if (enrolled(studentNum) || getPassing(studentNum)) { // etc. }

49 Biraz da kod Çıktı? public static void main(String args[]) {
int quiz1 = 42; int quiz2 = 99; if(isPassing(quiz1) && isPassing(quiz2)) System.out.println(“Passed both quizzes”); } public static boolean isPassing(int testGrade) { boolean passing = true; if (testGrade < 60) passing = false; System.out.println(“Is “ + testGrade + “ passing? “ + passing); return passing; Çıktı?

50 a b Sonuç? Neden? Is 42 passing? false Is 42 passing? false
Is 99 passing? true Neden?

51 Tek koşul için if yapısını kullanın.
Switch koşul ifadesi Tek koşul için if yapısını kullanın. İki koşul varsa if/else yapısını kullanın. İkiden daha fazla koşul varsa switch yapısını kullanın. Switch yapısının alternatifi if-elseif-elseif-else yapılarıdır. Not: Eğer aynı değişkenin değişik değerleri arasından seçim yapılcaksa kullanmak elverişlidir. Ancak, farklı değişkenlerin değerlerinde seçim yapılacaksa kullanılmamalıdır.

52 Switch switch (<değişken>) { case <değer1>:
//yapılmasını istediğiniz herhangi bir şey break; // isteğe bağlı case <değer2>: default: }

53 Default olmadan da çalışırdı ancak basit bir programlama olurdu.
Switch (devam) Switch yapısının en sonundaki default durumuna dikkat edin. (Seçimlidir) switch (iNumber) { case 1: System.out.println (“Bir”); break; case 2: System.out.println (“İki”); case 3: System.out.println (“Üç”); default: System.out.println(“Not 1, 2, veya 3”); break; // Gerekli mi??? } // switch Pratikte her zaman default ifadesini kullanmanız gerekir. Default olmadan da çalışırdı ancak basit bir programlama olurdu.

54 Kaç gün? if(month == 4 || month == 6 || month == 9 || month == 11)
numdays = 30; else if(month == 2) { numdays = 28; if(leap) numdays = 29; } else numdays = 31;

55 Switch switch (month) { case 4: case 6: case 9: case 11: numdays = 30;
break; case 2: numdays = 28; if(leap) numdays = 29; default: /* iyi bir fikir mi? */ numdays = 31; }

56 Switch yapısı ile ilgili bazı notlar
Switch yapısı sadece aşağıdaki veri türleriyle birlikte kullanılır. int, char, short & byte Case değerleri mutlaka aynı türden olmak zorundadır. Case değerleri mutlaka sabit değerler olmalıdır.

57 Switch yapısı switch (grade) { case ‘A’: case ‘a’: countOfAGrades++;
break; case ‘B’: case ‘b’: countOfBGrades++; case ‘C’: case ‘c’: countOfCGrades++; case ‘D’: case ‘d’: countOfDGrades++; case ‘F’: case ‘f’: countOfFGrades++; default: System.out.println(“Invalid grade”); } if (grade==‘A’ || grade==‘a’) countOfAGrades++; else if (grade==‘B’ || grade==‘b’) countOfBGrades++; else if (grade==‘C’ || grade==‘c’) countOfCGrades++; else if (grade==‘D’ || grade==‘d’) countOfDGrades++; else if (grade==‘F’ || grade==‘f’) countOfFGrades++; else System.out.println (“Invalid grade”); aynı (yukarıda kullanılan değişkenlerin dahan önceden oluşturulmuş olduğunu ve bir değere sahip olduklarını kabul ediyoruz.) Switch yapısı

58 Daha ileriye gitmeden önce...
Program kodunuz ne yapılmak istendiğini açık ve net bir şekilde ifade ediyor olmalı. Bununla ilgili 2 tür izleyici var Makine Diğer programcılar

59 If Tarz 1 if(<boole ifade>) { // doğruysa bu işlemleri yap }
else // yanlışsa bu işlemleri yap

60 If Tarz 2 if(<boole ifade>) { // doğruysa bu işlemleri yap
} // açıklama else { // yanlışsa bu işlemleri yap

61 Koşula bağlı atama <boole> ? <doğruysa yapılacak>
: <yanlışsa yapılacak> boolean b; int count; b = checkCompletion(); count = (b) ? 3 : 1; Not: Bu sentaks hızlı veya daha okunaklı falan değildir. Sadece C hacker ‘ları ile ilgili bir konu. Boole değer olmalı Eğer doğruysa . . . . . . Eğer yanlışsa

62 Koşullu ifadeler özet İki tür koşullu yapı vardır:
Kontrol yapıları İki tür koşullu yapı vardır: if { ... } else { ... } Boole değere göre dallanmalar var switch (...) { case ...; break; default: ... } Sabit değere göre dallanma var break deyimini unutmayın

63 Sorular?


"Sayısal Türler Tamsayılar (byte, short, int, long)" indir ppt

Benzer bir sunumlar


Google Reklamları