"Enter"a basıp içeriğe geçin

Veri Yapıları ve Değişkenler

Bu yazıda java dilindeki temel veri tipleri, değişkenler, aritmatik ifadeler ve kullanıcıdan veri alma konularını göreceğiz. Ama öncekile java ile ilgili 1-2 ek bilgi görelim.

Yorum satırı oluşturma

programlama dillerinde, satırların yada kodun ne işe yaradığı gibi açıklamalar yapmak için yorum satırı oluşturulabilir.
// bir satırdayazdıktan sonraki hiçbir kodu derleyici görmez
/* */ diyerek birden çok satırdan oluşan yorumlar yapabiliriz.

Birden çok kişi tarafından yazılan büyük projelerde yazdığımız kodların anlaşılması için yorum satırı yazmaya alışmamız gerekir.

Noktalı virgül

c c++ ve java gibi dillerde belki de en önemli şey ; işaretidir.
; satır sonu demektir. Her komuttan sonra satırın bittiğini belirtmek için ; kullanmalıyız.

Indentation

Yazdığımız kodun daha güzel görünmesi için bıraktığımız boşluklara dikkat etmemiz gerekir. Örnekler yaptıkça bu boşluklara zaten alışacağız.

Kütüphaneler

Java dilinde çeşitli kütüphaneler bulunur. Bu kütüphaneler sayesinde bazı işlevleri daha kolay hale getirebiliriz. Konularda ilerledikçe kütüphaneler ekleyip kullanacağız.

 

Artık aslı konumuza başlayabiliriz.

Java Dilinde Değişkenler

Değişkenler, içinde veri saklayan yapılardır. Program çalıştığında hafızada bir yer kaplarlar. ihtiyaç duyulduğunda değişkenin ismini kullanarak içindeki veriye erişebiliriz. Bir değişkeni oluştururken, içide tutacağı verinin tipini beirtmemiz gerekir. Böylece hafızada, tutacağı veri tipine göre bir boyut ayırır. Değişkenlerin içindeki veriler istendiği zaman değişebilir. Hafızadaki kapladığı alan artmaz yada azalmaz. Değişkenlerin tutabileceği bazı temel veri tipleri vardır. ve her birinin kapladığı alan farklıdır.

Hafızadaki en küçük alan birimi bit’tır. bir bit 0 yada 1 olabilir. 8 tane bit birleşerek 1 byte olur.

Tamsayı veri tipleri

byte: -128 ile 127 arasındaki sayıları tutabilir. 8 bit yer kaplar.
short: -32768 ile 32767 arasındaki sayıları tutabilir. 16 bit yer kaplar.
int: -2 milyon ile 2 milyon arasındaki sayıları tutabilir. 32 bit yer kaplar (-2^31,)
long -9 milyon ile 9 milyon arasındaki sayıları tutabilir. 64 bit yer kaplar.

Bunların hepsi tam sayı tutan veri tipleridir. Ama hafızadaki kapladıkları alanlar farklı olduğu için alabileceği değer aralığı da farklıdır. Eğer değer aralığını aşan bir değer verirsek, örneğin bir short değişkene 9876434 atamaya çalışırsak tamamını alamayacağı için hata ile karşılaşırız.
Bir değişken oluştururken, alabileceği değerleri ön görüp buna göre veri tipi seçmeliyiz. Mesela bir binadaki dairelerin numaralarını tutacak bir değişken için int kullanmak mantıksızdır. Daire numarası en fazla 128 olabileceğini ön görerek byte kullanmamız gerekir. int kullanırsak hafızada gereksiz yer kaplar.

Kesirli sayılar

float:kesirli sayıları ifade etmede kullanılır. 32 bit
Double: bu da kesirli sayılarda kullanılır. Ama tanım aralığı daha geniştir. 64 bit

Sayıların değer aralığı

Sayıların alabileceği en büyük ve en küçük değerleri görmek için:
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);

komutları kullanılır.

char

tek bir karakter tutar. Bu veri tiplerinin detaylarına ve diğer bazı veri tiplerine ileride değineceğiz.

Değişkenlerin kullanımı

int tipinde bir değişken oluşturalım.
Bir değişken oluştururken tipini ve değişkenin adını belirlemek zorundayız. İstersek içindeki veriyi de oluşturma sırasında verebiliriz.

int i; // baştaki int ile veri tipimizi belirledik. i değişkenin adıdır.
i=5; //=5 diyerek de değişkenin tutacağı değeri ayarladık.

int i; dediğimiz anda hafızada bir integer için gereken alan ayrıldı. =5 dediğimizde de bu alana 5 sayısı yazıldı.
Artık i değişkeninin içinde 5 tamsayısı var.

İlk oluşturduğumuz anda int i=5; diyerek de ilk değer ataması yapabilirdik. Buna ilklendirme denir.

Bu değişkeni önceki ders gördüğümüz sout işlevi sayesinde ekrana yazdırabiliriz.
Geçen ders yazdırdığımız şey bir metin olduğu için “” arasına yazmıştık. Ama bir değişkenin içindeki veriyi yazdırırken “” kullanmayız

System.out.println fonksiyonu i değerini yazdırması gerektiğini anladı. Hafızada i değişkeninin olduğu yere baktı. i değişkeninin içinde 5 olduğunu gördü ve 5 yazdırdı.

Bir değişkenin içeriğini daha sonradan değiştirebiliriz.

Hafızada a değişkeninin alanında 5 vardı. Bunu kullandı. i=8; dediğimizde 5 değeri silindi ve yerine 8 yazıldı.
Artık hafızada 8 olduğu için sout ile i’yi yazdırdığımızda 5 yazdı.

Aynı anda 2 değişken tanımlamamız mümkündür.

Aritmatik İşlemler

Değişkenlerle aritmatik işlemler yapabiliriz.

İşlemlerin sonucunu buldu ve değişkenlere ilk değer olarak atadı.

İki değişkenle de aritmatik işlemler yapmak mümkündür.

Değişkenleri isimlendirirken bazı kurarlar vardır.
Değişken isimleri karakterler ve sayılardan oluşmalıdır. Değişkenin ismi sayı ile başlayamaz.

Değişkenleri yazdırırken metin de ekleyebiliriz. Bunun için de yine + işaretini kullanırız.
Diğer çoğu dilin aksine, değişkende türkçe karakter olabilir.

iki tırnak arasındaki şeylerin metin olduğunu söylemiştik. Bir metin ile bir sayıyı toplayamayacağı için direkt yazdırdı.

Bazı veri tipleri farklı tipler olsalar da aritmatik işlem yapmaya veya birbirine atamaya izin verir.

Mesela byte, short, int ve long aynı işlemde kullanılabilirler. Bu dönüşüm otomatik yapılır. Çünkü byte ile tutulan şey int ile de tutulabilir.
Ancak tam tersi mümkün değildir. Yani int ile tutulan şey byte ile tutulamaz. Bu yüzden sonucun atanacağı veri tipi, işlemdeki en büyük veri tipinden büyük olmalıdır.

Oldu. Çünkü işlemin sonucu olan 5188 int ile tutulabilir.

 

Hata verir. Çünkü işlemin sonucu short ile tutulamaz

 

Bu normalde olabilir gibi duruyor. a*3 işleminin sonucu short ile tutulabilecek bir değerdir. Ama bu da hata verir. Çünkü java’da varsayılan veri tipi int’tir. Yani 3 sayısını integer olarak algılar.
önce a*3 işlemi yapılır. İşlemiin sonucu geçici bir değişkende tutulur. Bu geçici değişkenin veri tipi, işleme katılan değişkenler arasında boyutu en büyük olandır. Bu örnekte geçici değişken inttir.
Sonra geçici değişken b değişkenine atanır. Ama int değişken shorta atanamaz ve hata alırız.
Bunun için dönüşüm yapmamız gerekir.

parantez içindeki short, a*3 işleminin sonucu olan geçici değişkeni short veri tipine dönüştür demektir.
Artık short sonuç short b değişkenine atanabilir.

Peki sonuç gerçekten de tutulamayan bir değer olsaydı.

Sonuç gerçekte de çok büyük ve short ile tutulamaz. Bu durumda işlem yapılsa da kayıp olur.

= işaretinin sağ tarafı hesaplanıp geçici bir değişkene konup sonra sol taraftaki değişkene atanıyorsa aşağıdaki gibi bir örnek yapılabilir.

a*2+10 işleminin sonucu hesaplandı. geçici hafızada tutldu. Sonrasında bu sonuç a değişkenine atandı. Yani a değişkeninin değerini güncellemiş olduk.

Float ve double için gösterimler

Bir kesirli sayının float yada double olduğunu göstermek için sonuna f yada d konabilir (mümkün olduğunca koyun).

double değişkenlerin gösterimleri böyle. Bunda bir sıkıntı yok
float sayılar da sonuna f koyarak yani float i=10.15f; diyerek gösterilebilir.
Ancak float a=10.15 dersek hata alırız. çünkü 10.15 double gösterimidir. float a=(float)10.15 veya float b=10.15f olarak göstermeliyiz

Bir int sayıyı böldüğümüzde virgülden sonra kalan oluyorsa bunu göstermez. Ancak float veya double ile tutarsak gösterir. Double ile tutulduğunda virgülden sonra daha fazla basamak gösterir.

b ve c değişkenlerinde, 10 ve 3 int değerler olduğu için sonuç da bir int değer olur. int değer virgülden sonrasını tutamaz.
(float)10/3 diyerek, 10/3 işleminin sonucunun int değil de float bir değişkende tutulmasını sağladık.
double virgülden sonra daha fazla basamak gösterdi.

Sonuç olarak küçük veri tipleri büyük veri tiplerine otomatik dönüşür. Ama büyükler küçüklere otomatik dönüşmez. Elle dönüştürdüğümüzde de veri kaybı oluşabilir.
double>float>int>short>byte

parantez kullanarak işlem önceiklerini ayarlayabiliriz. Bu dönüşümlerin sırasını da etkiler.

Aritmatik işlemler:
toplama, çıkarma, çarpma, bölme ve mod olmak üzere 5 temel aritmatik operatörümüz vardır.
Normal matematikte olduğu gibi parantezler ve işaretler ile matematiksel ifadeler oluşturabiliriz.

b/2+c*6=29dur. 29*a=232dir. 232 mod 3 de =1 olur.

++ ve — operatörleri ile sayıları 1 arttırabilir yada 1 azaltabiliriz.

Prefix ve postfix

a++ önce kullanır sonra arttırır. ++a arttırılmış halini kullanır.

a=a+3; ifadesinin a değerini 3 arttırarak güncellediğini söylemiştik.
a+=3; ifadesi de aynı işlevi görür.

char

tek bir karakter göstermeye yarar. 2 bayt yer kaplar. 2^16 farklı karakteri ifade edebilir. char değişkenler ” arasında gösterilir
char c1=’C’; c1 değişkeni C karakterini tutar.

Bu karakterler aslında Unicode tablosundaki karakterlerdir.
C karakterinin ACII karşılığı 67’dir
char c2=67; yazarsam da aynı sonuç olur.

c++ gibi dillerde bu değer 1 bayt olduğu için alabileceği karakter sayısı çok düşüktü.
java dilinde char ile dünyadaki neredeyse her karakteri tutabiliriz.
Tüm karakterler için https://unicode-table.com/tr/
char c3=’\u0026′; diyerek unicode table kodunu da yazabiliriz.

bool ifadeler

mantıksal işlemlerde kullanılırlar. Sadece True ve False değerlerini alırlar.

String

Birden çok karakter yani char tutan veri tipidir. Kelime , cümle veya metin gibi birden çok karakter tutabilirler. String standart bir tip değildir.
“Bu bir string” şeklinde ifade edilirler.

Stringler ile toplama işlemi yaptığımızda uç uca ekler

Görüldüğü gibi arada boşluk bile bırakılmadı.

Tüm temel veri tipleri stringe otomatik dönüşür.

Buna bir örnektir

a tamsayısı otomatik olarak stringe dönüştü ve iki string toplandı.

Escape karakterler

Java’da bazı escape karakterleri bulunur. Stringlerde kullanılırlar. başlarında \ bulunur.
\n : alt satıra geçer
\t : tab ekler

“” \ gibi karakterlerin stringleri manipüle ederken kullanıldığını gördük.
Eğer metnimizde bu karakterleri gerçekten kullanmak istiyorsak da başına \ eklemeliyiz

Sabitler (constants)

İçinde herhangi bir değişken ifade bulunmayan ögelerdir. oluşturulduktan sonra değiştirilemezler.
Bir değişkeni sabit yapmak için final anahtar kelimesi kullanılır. final olarak tanımlanan değişkenler sadece ilklendirilebilirler.

Kullanıcıdan Veri Alma

Şimdiye kadar değerleri hep kendimiz programı yazarken vermiştik. Ama kullanıcıdan da değer almak isteyebiliriz.
Bunun için scanner nesneleri kullanılır.
Nesneleri ileride göreceğimiz için mantığını anlamanıza şimdilik gerek yok. Kullanıcıdan değer almak istediğimizde böyle yapılacağını bilmeniz yeterli.

 

Klavyeden değer almak için bir scanner oluşturduk. scanner içindeki nextInt() fonksiyonu klavyeden bir değer aldı. Ve enter girilene kadar olan değer boy değişkenine atandı.
Float için nextFloat, double için nextDouble kullanabiliriz.
String almak için nextLine kullanırız.

Eğer kullanıcı yanlış tipte bir değer girersek hata alırız.

 

bu sefer scanner yerine input ismini verdim. İstedğim ismi kullanabilirim.

Kullanıcının doğru tipte değer girdiğinden emin olmak için aşağıdaki yapı kullanılır.

import java.util.Scanner; //scanner kullanmak için Scanner sınıfını ekledik

Java, enter’ı da bir değer olarak algılar. Bu yüzden ard arda 2 scanner kullanırsak (string alan) , ilkini girip entera bastığımızda, 2. scanner enterı alır.


Bunu engellemek için, iki scanner arasına boş bir scanner eklememiz gerekir.

Ard arda birden çok değer istediğinde, space bırakarak da değerleri girebiliriz. (stringde sıkıntı çıkabilir.)

 

 

    Bir cevap yazın

    E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir