Değişkenler, Veri Türleri ve Operatörler

Bilgisayar ve Programlamaya Giriş
DeğişkenTürDönüşümOperatörGirdi/Çıktı
Sercan KÜLCÜ · Giresun Üniversitesi

Giriş

Öğrenme Çıktıları

Değişken

Değişken tanımlamak, ilk değer vermek ve güncellemek.

Tür

İlkel türleri ve değer aralıklarını seçmek.

İfadeler

Atama, dönüşüm ve operatörleri doğru kullanmak.

Girdi/Çıktı

Scanner ile girdi almak, printf ile biçimli çıktı üretmek.

Veri

Değişkenler

20yaşad (tanımlayıcı)değer(değişebilir)tür: int → 32 bitlik yer ayrılırint yaş = 20;
  • Değişken, belirli türdeki bir değere bellekte ayrılmış adlı bir kutudur.
  • Tanımlama tür ve adı; ilk değer atama başlangıç değerini belirtir.
  • Tür, kutunun boyutunu ve içine konabilecek değerleri belirler.
  • Yerel değişken kullanılmadan önce kesin olarak değer almış olmalıdır.

Veri

Temel Tür Grupları

GrupÖrnekKullanım
Tam sayıbyte, short, int, longSayma ve ayrık değer
Ondalıklıfloat, doubleÖlçüm ve yaklaşık hesap
KaraktercharTek UTF-16 kod birimi
Mantıksalbooleantrue / false
BaşvuruString, dizi, sınıfNesneye başvuru

Veri Türleri

İlkel Veri Türleri

TürYaklaşık kullanımÖrnek
byte / shortKüçük tam sayılarbyte seviye = 7;
intGenel tam sayıint adet = 42;
longBüyük tam sayılong nüfus = 8_000_000L;
floatOndalıklı, düşük hassasiyetfloat oran = 1.5F;
doubleGenel ondalıklı sayıdouble fiyat = 19.90;
char / booleanKarakter ve mantıkchar not='A';

Veri Türleri

Tür Boyutları (bit)

016324864bit sayısıbyte8-128 … 127short16-32.768 … 32.767char160 … 65.535int32≈ ±2,1 milyarlong64≈ ±9,2 × 10¹⁸float32≈ 7 anlamlı basamakdouble64≈ 15–16 anlamlı basamakbooleantrue / false — boyutu JVM'e bağlı

Vurgulu: varsayılan seçimler (int, double). 1 bayt = 8 bit; boyutlar her platformda aynıdır.

Veri Türleri

Tam Sayı Türü Seçimi

  • int çoğu tam sayı hesabı için varsayılan seçimdir; long sabitleri L son ekiyle yazılır.
  • Aralığı aşan tam sayı işlemi taşar: Java hata vermez, değer sessizce öbür uca sarar.
  • Integer.MAX_VALUE + 1 → -2147483648.
  • Büyük değerler bekleniyorsa baştan long seçilir.
12701111111+ 100000001−12810000000işaret bitibyte (8 bit) örneği

Veri Türleri

Ondalıklı Sayılar

  • double çoğu yaklaşık hesap için varsayılan türdür; float sabiti F son eki ister.
  • İkili kayan nokta bazı ondalık değerleri (0.1 gibi) tam temsil edemez.
  • Para gibi kesin ondalık hesaplarda uygun sınıf (BigDecimal) ve yuvarlama kuralı seçilmelidir.
0.10.10000000000000000555…0.20.20000000000000001110…bellekte saklanan en yakın ikili değer0.1 + 0.2 → 0.30000000000000004bu yüzden double değerler == ile karşılaştırılmaz

Veri Türleri

char ve boolean

  • char tek tırnakla yazılır; bir UTF-16 kod birimini (sayı olarak) saklar: 'A' = 65.
  • String çift tırnakla yazılan bir nesnedir; değişken nesneye başvuru tutar. char ile aynı tür değildir.
  • boolean yalnızca true veya false değerini alır; 0/1 ile yer değiştirmez.
char harf = 'A';'A'= 65 (Unicode)0000000001000001String metin = "A";String nesnesi"A"başvuruboolean aktif = true;trueyalnızca true / false

Değişkenler

Tanımlayıcı Kuralları

KuralGeçerliGeçersiz
Harf, _ veya $ ile başlarogrenci11ogrenci
Boşluk içermeztoplamPuantoplam puan
Anahtar kelime değildirsinifNoclass
Tek alt çizgi ad olamaz_değer_
Büyük-küçük harfe duyarlıpuan ve PuanAynı değişken sanmak

Değişkenler

İsimlendirme

  • Değişken ve metot adlarında lowerCamelCase kullanılır.
  • Sınıf adları UpperCamelCase biçimindedir.
  • Sabitler genellikle BÜYÜK_HARF_VE_ALT_ÇİZGİ ile adlandırılır.
  • Ad, değerin rolünü açıklamalıdır: x yerine toplamPuan.

Değişkenler

Tanımlama ve İlk Değer

int yaş;          // tanımlama
yaş = 20;        // atama
double ortalama = 82.5; // birlikte
final int MAKSIMUM = 100; // sabit
  • Yerel değişken okunmadan önce değer almalıdır.
  • final değişkene yalnızca bir kez atama yapılır.

Değişkenler · Kodu adım adım çalıştır

Değişkenler Bellekte Adım Adım

Bellek (değişkenler)yaş?int

Tanımlama: int türünde yaş kutusu ayrılır ama değeri yok. Bu hâliyle okunursa derleyici hata verir.

Bellek (değişkenler)yaş20int

İlk atama: sağdaki 20 değeri yaş kutusuna yazılır.

Bellek (değişkenler)yaş20intİfadeyaş + 120 + 1→ 21

Önce sağ taraf hesaplanır: yaş + 1 → 20 + 1 → 21. Kutu henüz değişmedi.

Bellek (değişkenler)yaş21int

Sonuç aynı kutuya yazılır: eski 20 silinir, yaş = 21.

Bellek (değişkenler)yaş21intortalama82.5double

double türünde ortalama tanımlanır ve aynı deyimde 82.5 atanır.

Bellek (değişkenler)yaş21intortalama82.5doubleİfadeortalama + 582.5 + 5→ 87.5

ortalama += 5, ortalama = ortalama + 5 demektir: 82.5 + 5 → 87.5.

Bellek (değişkenler)yaş21intortalama87.5double

Kutu güncellenir: ortalama = 87.5.

Bellek (değişkenler)yaş21intortalama87.5doubleMAKSIMUM100final int

final sabit: 100 bir kez atanır. MAKSIMUM = 200; yazılsaydı derleme hatası olurdu.

Bellek (değişkenler)yaş21intortalama87.5doubleMAKSIMUM100final int

yaş kutusu okunur ve 21 yazdırılır. Okuma değeri değiştirmez.

Bellek (değişkenler)yaş21intortalama87.5doubleMAKSIMUM100final int

ortalama okunur: 87.5. Son durum: 3 kutu, 2 satır çıktı.

int yaş;                  // tanımlama
yaş = 20;                 // ilk atama
yaş = yaş + 1;            // güncelleme
double ortalama = 82.5;   // tanımlama + atama
ortalama += 5;            // bileşik atama
final int MAKSIMUM = 100; // sabit
System.out.println(yaş);
System.out.println(ortalama);

Veri

Atama ve Güncelleme

  • Atama işleci = önce sağ tarafı hesaplar, sonra değeri soldaki değişkene yazar.
  • Yeni değer değişkenin türüyle uyumlu olmalıdır.
  • Bileşik atama mevcut değeri kullanarak günceller: toplam += fiyat ≡ toplam = toplam + fiyat.
toplam50intfiyat20inttoplam += fiyat;

Başlangıç: toplam = 50, fiyat = 20.

toplam50intfiyat20inttoplam + fiyat → 50 + 20 → 70

Önce iki kutu okunur ve sağ taraf hesaplanır.

toplam70intfiyat20inttoplam ← 70

Sonuç soldaki kutuya yazılır: toplam = 70. fiyat değişmez.

Dönüşüm

Atama Uyumluluğu

byteshortintlongfloatdoublegenişletme (otomatik): soldan sağachardaraltma: açık dönüşüm gerekir → int x = (int) 9.8; // 9long → float: aralık genişler, basamak kaybı olabilir
  • Dar türden geniş türe dönüşüm (genişletme) otomatik yapılır: double d = 7;
  • Daraltma bilgi kaybı riski taşıdığı için açık dönüşüm (cast) ister.
  • Dönüşüm kaynak değişkeni değiştirmez; yalnızca üretilen sonucu etkiler.

Dönüşüm

Tür Dönüşümü

int adet = 7;
double geniş = adet;       // 7.0
double oran = 9.8;
int dar = (int) oran;      // 9
int bölüm = 5 / 2;         // 2
double doğru = 5.0 / 2;   // 2.5
  • double değerini int'e çevirmek kesir bölümünü atar.
  • İşlemden sonra yapılan dönüşüm kaybolan kesri geri getirmez.

Dönüşüm · Kodu adım adım çalıştır

Tür Dönüşümü Adım Adım

Bellek (değişkenler)adet7intadet ← 7

adet: int kutusu (32 bit), değer 7.

Bellek (değişkenler)adet7intgeniş7.0double(int) 7  →  (double) 7.0

Genişletme: int değer double kutuya otomatik dönüşür: 7 → 7.0. Bilgi kaybı yok.

Bellek (değişkenler)adet7intgeniş7.0doubleoran9.8doubleoran ← 9.8

oran: double kutusu (64 bit), değer 9.8.

Bellek (değişkenler)adet7intgeniş7.0doubleoran9.8doubledar9int(int) 9.8  →  9   (kesir atıldı)

Daraltma: (int) açıkça yazılmalı. Kesir atılır (yuvarlanmaz): 9.8 → 9. oran hâlâ 9.8.

Bellek (değişkenler)adet7intgeniş7.0doubleoran9.8doubledar9intbölüm2intint / int  →  5 / 2  →  2

5 ve 2 ikisi de int → tam sayı bölmesi: 5 / 2 = 2, kalan atılır.

Bellek (değişkenler)adet7intgeniş7.0doubleoran9.8doubledar9intbölüm2intdoğru2.5doubledouble / int  →  5.0 / 2.0  →  2.5

5.0 double olduğu için 2 de 2.0'a genişler: 5.0 / 2.0 = 2.5.

int adet = 7;
double geniş = adet;       // 7.0
double oran = 9.8;
int dar = (int) oran;      // 9
int bölüm = 5 / 2;         // 2
double doğru = 5.0 / 2;    // 2.5

Dönüşüm · Kodu adım adım çalıştır

5 / 2 ile 5.0 / 2

5int/2intint / int → int

İki işlenen de int → tam sayı bölmesi: bölüm alınır, kesir atılır.

5int/2int→2int

Sonuç 2 (int) yazdırılır.

5.0double/2intint işlenen double'a genişler

Bir işlenen double → diğeri de double'a yükseltilir (2 → 2.0). Ondalıklı bölme yapılır.

5.0double/2int→2.5double

Sonuç 2.5 (double) yazdırılır.

5int/2.0doubleint işlenen double'a genişler

Bir işlenen double → diğeri de double'a yükseltilir (5 → 5.0). Ondalıklı bölme yapılır.

5int/2.0double→2.5double

Sonuç 2.5 (double) yazdırılır.

(double)5int→5.0double

Tür dönüşümü /'dan önce gelir: (double) 5 → 5.0.

5.0double/2intint işlenen double'a genişler

Bir işlenen double → diğeri de double'a yükseltilir (2 → 2.0). Ondalıklı bölme yapılır.

5.0double/2int→2.5double

Sonuç 2.5 (double) yazdırılır.

5int/2int→2int

Parantez içi önce: 5 / 2, ikisi de int → tam sayı bölmesi = 2. Kesir burada kaybolur.

(double)2int→2.0double

Sonra (double) 2 → 2.0. Kaybolan .5 geri gelmez.

(double)2int→2.0double

2.0 yazdırılır: işlemden sonra yapılan dönüşüm kesri kurtarmaz.

5int%2intint % int → int

İki işlenen de int → kalan: 5 = 2·2 + 1.

5int%2int→1int

Sonuç 1 (int) yazdırılır.

System.out.println(5 / 2);
System.out.println(5.0 / 2);
System.out.println(5 / 2.0);
System.out.println((double) 5 / 2);
System.out.println((double) (5 / 2));
System.out.println(5 % 2);

Operatörler

Aritmetik Operatörler

İşleçAnlamÖrnek
+ -Toplama / çıkarmaa + b
* /Çarpma / bölmea * b
%Kalansayi % 2
++ --Bir artır / azalti++
+= -=Bileşik atamatoplam += değer
1. grup2. grup3. grupartan17 / 5 = 317 % 5 = 2

Operatörler

Karşılaştırma ve Mantık

İşleçAnlamÖrnek
== !=Eşit / farklıa == b
< <= > >=Sıra karşılaştırmasınot >= 60
&&İki koşul da doğruyaş >= 18 && belgeVar
||En az biri doğruhaftaSonu || tatil
!Mantıksal değil!aktif
pqp && qp || q
falsefalsefalsefalse
falsetruefalsetrue
truefalsefalsetrue
truetruetruetrue

Karşılaştırmanın sonucu her zaman boolean'dır.

Operatörler

İşlem Önceliği

  • Parantez içi önce değerlendirilir; tekli ! ve tür dönüşümü de önce gelir.
  • Çarpma, bölme ve kalan; toplama ve çıkarmadan önce gelir.
  • Karşılaştırmalar aritmetikten, && / || karşılaştırmadan sonra değerlendirilir.
  • Aynı düzeyde soldan sağa gidilir (atama hariç). Parantez niyeti görünür kılar.
( )parantez!  ++  --  (tür)tekli*  /  %çarpımsal+  -toplamsal<  <=  >  >=sıra==  !=eşitlik&&ve||veya=  +=  -=atama

Operatörler · Adım adım

İfade Ağacı: 2 + 3 * 4 > 10 && 7 % 2 == 1

2+3*4>10&&7%2==12 + 3 * 4 > 10 && 7 % 2 == 1

Derleyici ifadeyi önceliğe göre bir ağaca dönüştürür: en alttaki işlem en önce, kök (&&) en son hesaplanır.

2+3124>10&&7%2==12 + 12 > 10 && 7 % 2 == 1

*, +'dan önce gelir: 3 * 4 = 12.

2143124>10&&7%2==114 > 10 && 7 % 2 == 1

sonra toplama: 2 + 12 = 14.

2143124true10&&7%2==1true && 7 % 2 == 1

Karşılaştırma: 14 > 10 → true (boolean). Sol taraf true: && sağ tarafa geçer.

2143124true10&&712==1true && 1 == 1

sağ tarafta önce kalan: 7 % 2 = 1.

2143124true10&&712true1true && true

Karşılaştırma: 1 == 1 → true (boolean).

2143124true10true712true1true

Kök: true && true → true. Sol taraf true olduğu için sağ taraf da hesaplanmak zorundaydı.

Operatörler

Kısa Devre Değerlendirme

if (metin != null && !metin.isEmpty()) {
    System.out.println(metin.length());
}
  • && ilk koşul false ise ikinci koşulu çalıştırmaz.
  • Bu davranış null değer üzerinde metot çağrısını önler.

Operatörler · Kodu adım adım çalıştır

Kısa Devre Adım Adım

metinnullmetin != null&&!metin.isEmpty()

metin hiçbir nesneyi göstermiyor: değeri null.

metinnullmetin != nullfalse&&!metin.isEmpty()

Sol koşul: metin != null → false.

metinnullmetin != nullfalse&&!metin.isEmpty()çalıştırılmadı→false

Kısa devre: sol taraf false ise && sonucu kesin false; sağ taraf hiç çalışmaz. Böylece null üzerinde isEmpty() çağrılmaz (hata önlenir).

metinnullmetin != nullfalse&&!metin.isEmpty()çalıştırılmadı→false

Koşul false → blok atlanır, hiçbir şey yazılmaz.

metin"Merhaba"metin != null&&!metin.isEmpty()

metin artık "Merhaba" nesnesini gösteriyor.

metin"Merhaba"metin != nulltrue&&!metin.isEmpty()

Sol koşul: metin != null → true. Sonuç henüz belli değil, sağ tarafa geçilir.

metin"Merhaba"metin != nulltrue&&!metin.isEmpty()true→true

Sağ koşul: metin.isEmpty() → false, ! ile → true. true && true → true.

metin"Merhaba"metin != nulltrue&&!metin.isEmpty()true→true

Bloğa girilir: metin.length() → 7 yazdırılır. Koşulların sırası ters olsaydı null durumunda program çökerdi.

String metin = null;
if (metin != null && !metin.isEmpty()) {
    System.out.println(metin.length());
}
metin = "Merhaba";
if (metin != null && !metin.isEmpty()) {
    System.out.println(metin.length());
}

Veri

Türler Farklı Davranır

System.out.println(2 + 3);       // 5
System.out.println("2" + "3");   // 23
System.out.println("Sonuç: " + 2 + 3); // Sonuç: 23
System.out.println("Sonuç: " + (2 + 3)); // Sonuç: 5
  • İşleç davranışı operand türlerine bağlıdır.
  • Parantez değerlendirme sırasını açıklaştırır.

Veri · Kodu adım adım çalıştır

"Sonuç: " + 2 + 3 Adım Adım

2int+3int→5int

2 + 3: iki int → sayısal toplama.

5int

Çıktı: 5.

"2"String+"3"String→"23"String

"2" + "3": işlenenlerden biri String → birleştirme: 3 metne eklenir.

"23"String

Çıktı: 23.

"Sonuç: "String+2int+3int→"Sonuç: 2"String

"Sonuç: " + 2: işlenenlerden biri String → birleştirme: 2 metne eklenir. + soldan sağa değerlendirilir: önce ilk ikisi.

"Sonuç: 2"String+3int→"Sonuç: 23"String

"Sonuç: 2" + 3: işlenenlerden biri String → birleştirme: 3 metne eklenir.

"Sonuç: 23"String

Çıktı: Sonuç: 23. 3 de metne eklendi; 2 + 3 hiç toplanmadı.

2int+3int→5int

Parantez önce: 2 + 3, iki int → toplama = 5.

"Sonuç: "String+5int→"Sonuç: 5"String

Sonra "Sonuç: " + 5 → String varsa birleştirme → "Sonuç: 5".

"Sonuç: 5"String

Çıktı: Sonuç: 5. Parantez, toplamanın önce yapılmasını sağladı.

System.out.println(2 + 3);
System.out.println("2" + "3");
System.out.println("Sonuç: " + 2 + 3);
System.out.println("Sonuç: " + (2 + 3));

Girdi

Scanner ile Girdi

Scanner klavye = new Scanner(System.in);
System.out.print("Yaş: ");
int yaş = klavye.nextInt();
klavye.nextLine(); // satır sonunu tüket
System.out.print("Ad: ");
String ad = klavye.nextLine();
  • Dosyanın başında import java.util.Scanner; gerekir.
  • nextInt sayıyı, nextLine tüm satırı okur.
  • Farklı okuma metotları birlikte kullanılırken kalan satır sonuna dikkat edilir.

Girdi · Kodu adım adım çalıştır

Scanner Girdi Akışı Adım Adım

klavye → System.in tamponu▲okuma konumutampon boş

Scanner nesnesi klavyeye (System.in) bağlanır. Tampon boş.

klavye → System.in tamponu▲okuma konumutampon boş

print istemi yazar; satır sonu yok, imleç "Yaş: " arkasında.

klavye → System.in tamponu20⏎▲okuma konumu⏳ kullanıcı yazıyor…

nextInt() tampon boş olduğu için bekler. Kullanıcı 20 yazıp Enter'a basar: tampona "20⏎" girer.

klavye → System.in tamponu20⏎▲okuma konumuokunan: 20

nextInt yalnızca sayıyı (20) okur; ⏎ tamponda kalır.

klavye → System.in tamponu20⏎▲okuma konumuokunan: ""

nextLine() ⏎'e kadar okur: boş metin ("") döner ve ⏎ tüketilir. Tampon temizlendi.

klavye → System.in tamponu20⏎▲okuma konumu

İstem "Ad: " yazılır.

klavye → System.in tamponu20⏎Ada Yılmaz⏎▲okuma konumu⏳ kullanıcı yazıyor…

nextLine tampon boş olduğu için bekler; kullanıcı Ada Yılmaz yazar ve Enter'a basar.

klavye → System.in tamponu20⏎Ada Yılmaz⏎▲okuma konumuokunan: "Ada Yılmaz"

nextLine tüm satırı (boşluk dahil) okur: ad = "Ada Yılmaz". ⏎ tüketilir, satıra dahil edilmez.

Scanner klavye = new Scanner(System.in);
System.out.print("Yaş: ");
int yaş = klavye.nextInt();
klavye.nextLine(); // satır sonunu tüket
System.out.print("Ad: ");
String ad = klavye.nextLine();

Girdi · Kodu adım adım çalıştır

Satır Sonu Tüketilmezse

klavye → System.in tamponu▲okuma konumutampon boş

Scanner nesnesi klavyeye (System.in) bağlanır. Tampon boş.

klavye → System.in tamponu▲okuma konumutampon boş

print istemi yazar; satır sonu yok, imleç "Yaş: " arkasında.

klavye → System.in tamponu20⏎▲okuma konumu⏳ kullanıcı yazıyor…

nextInt() tampon boş olduğu için bekler. Kullanıcı 20 yazıp Enter'a basar: tampona "20⏎" girer.

klavye → System.in tamponu20⏎▲okuma konumuokunan: 20

nextInt yalnızca sayıyı (20) okur; ⏎ tamponda kalır.

klavye → System.in tamponu20⏎▲okuma konumu

İstem "Ad: " yazılır.

klavye → System.in tamponu20⏎▲okuma konumuokunan: ""

Tamponda hâlâ ⏎ var: nextLine beklemeden boş metin döner. ad = "". Kullanıcıya ad sorulamadı!

klavye → System.in tamponu20⏎▲okuma konumu

Çıktı []: ad boş. Çözüm: nextInt'ten sonra bir klavye.nextLine(); ile ⏎'i tüketmek.

Scanner klavye = new Scanner(System.in);
System.out.print("Yaş: ");
int yaş = klavye.nextInt();
System.out.print("Ad: ");
String ad = klavye.nextLine();
System.out.println("[" + ad + "]");

Girdi

Girdi Doğrulama

  • Kullanıcının her zaman beklenen türde değer gireceği varsayılmamalıdır.
  • Aralık ve iş kuralı doğrulaması tür kontrolünden sonra yapılır.
  • Hata iletisi beklenen biçimi açıkça söylemeli ve yeniden deneme yolu sunmalıdır.
girdiyi okutam sayı mı?hata:türhayırevet0 ≤ yaş ≤ 150 ?hata:aralıkhayırevetkabul ethata → iletiyi göster, yeniden sor (Bölüm 8)

Çıktı

Biçimli Çıktı: printf

String ad = "Ada";
double ortalama = 87.456;
System.out.printf("%-10s %6.2f%n", ad, ortalama);
%-10ssola yasla · 10 karakter · metinad → "Ada"␣boşluk%6.2f6 karakter · 2 ondalık · sağa yaslaortalama → 87.456%nsatır sonuA1d2a3·4·5·6·7·8·9·10·11·12813714.1541661710 karakter: "Ada" + 7 boşluk6 karakter: " 87.46"87.456 → 87.46: yuvarlanır (kesilmez)

%s metin · %d tam sayı · %f ondalıklı · %n platforma uygun satır sonu

Hata Ayıklama

Yaygın Hatalar

HataÖrnekNe olur?
= ile == karışırif (x = 5)Derleme hatası: int, boolean değil
Tam sayı bölmesidouble o = 7 / 2;o = 3.0, 3.5 değil
Kapsam dışı kullanım{ int k = 1; } k++;k blok dışında tanımsız
Yanlış noktalı virgülif (x > 0);Boş deyim: koşul hiçbir şeyi kontrol etmez
String ve ==s1 == s2İçeriği değil, başvuruyu karşılaştırır → s1.equals(s2)

Özet

Bölüm Özeti

  • Değişken, belirli türdeki bir değere anlamlı bir ad verir ve okunmadan önce değer almalıdır.
  • İlkel türler farklı değer kümeleri ve bellek gereksinimleri taşır.
  • Genişletme otomatik yapılır; daraltma açık dönüşüm ister ve bilgi kaybettirebilir.
  • Operatör önceliği ve operand türleri ifadenin sonucunu doğrudan belirler.
  • Kullanıcı girdisi hem tür hem iş kuralı açısından doğrulanmalıdır.

Özet

Kontrol Soruları

  1. int ve double bölmesi nasıl farklı sonuç verir?
  2. Daraltıcı dönüşüm neden açıkça yazılır?
  3. "Sonuç: " + 2 + 3 ifadesi neden Sonuç: 23 yazdırır?
  4. && işleci kısa devreyi nasıl kullanır?
  5. nextInt sonrasında nextLine kullanırken neye dikkat edilir?

Son

Değişkenler, Veri Türleri ve Operatörler
1 / 1Sercan KÜLCÜ, Tüm hakları saklıdır.

← → veya boşluk ile gezinin · F: tam ekran · Home/End: ilk/son slayt