Vize tekrar: 1-7. haftalar
Derleme zincirinden ArrayList'e kadar bütün vize konularının tek tablo özeti, en çok puan kaybettiren tuzaklar, sınav taktiği ve karışık sınav tipi sorular.
Vizenin kapsamı ilk yedi hafta: Java’nın derlenip çalışması, değişkenler ve operatörler, Scanner ve String, karar yapıları, döngüler, metotlar ve diziler (ArrayList dahil). Bu sayfa yeni bir şey öğretmiyor; dağınık kuralları tek yerde topluyor ve en çok puan kaybettiren tuzakları sıralıyor. Sonundaki sorular konuları karıştırıyor, tıpkı gerçek sınav gibi.
Önce özet tabloyu oku, sonra soruları kâğıt kalemle çöz. Yanlış yaptığın her sorunun konusuna dön ve o sayfanın “Sık yapılan hatalar” tablosunu tekrar oku.
Tek tablo özet
| Hafta | Konu | Bilmen gereken çekirdek |
|---|---|---|
| 1 | Derleme ve çalıştırma | javac Hello.java → Hello.class (bytecode) → java Hello → JVM. Üç hata türü: compile-time (;, isim, tip), runtime (/ by zero, dizi sınırı), logic (yanlış sonuç). |
| 2 | Değişkenler, tipler, printf | 8 primitive. Genişletme otomatik, daraltma cast ister; cast keser. char + int = int. printf %d %.2f %s %n, %5d genişlik. |
| 2 | Scanner, String, ++ | nextInt sonrası nextLine boş döner. charAt char döner, substring(a, b) b hariç, equals ile karşılaştır. x++ eski, ++x yeni değer. |
| 2 | Operatörler | int bölme keser, % işareti soldan, * / % önce, aynı seviye soldan sağa, String + soldan sağa birleştirir. |
| 3 | if/else, switch | else if’te ilk true dal. Kısa devre. switch’te break yoksa fall-through. |
| 4 | Döngüler | while 0+ tur, do-while 1+ tur. break/continue. İç içe döngüde iç döngü her dış turda baştan döner. |
| 5 | Metotlar | Başlık, return, void. Pass-by-value. Scope. Overloading: aynı ad, farklı parametre listesi. Math ve Random aralığı. |
| 6 | Diziler | new int[n], indeks 0..n-1, length. Enhanced for okur. Dizi metoda referans olarak gider. |
| 7 | Algoritmalar, ArrayList | Arama -1, yerinde ters çevirme yarıya kadar, b = a alias. ArrayList: size, get, set, add, remove. |
En pahalı on tuzak
Puanı en çok bunlar götürüyor. Her biri bir önceki sayfada ayrıntılı anlatıldı.
| # | Tuzak | Doğrusu |
|---|---|---|
| 1 | double d = 7 / 2; → 3.5 | 3.0, bölme int yapıldı |
| 2 | "Sum: " + 3 + 4 → Sum: 7 | Sum: 34, soldan sağa birleştirme |
| 3 | if (s == "yes") | s.equals("yes") |
| 4 | switch’te break yok, sadece eşleşen case çalışır | Alttaki her şey çalışır |
| 5 | for (i = 0; i <= n; i++) n tur | n + 1 tur |
| 6 | Döngüden sonra sayaç son yazılan değer | Koşulu bozan değer |
| 7 | Metot parametreyi değiştirince main’deki değişken değişir | Değişmez (pass-by-value) |
| 8 | Metot diziyi değiştiremez | Elemanlarını değiştirebilir |
| 9 | Math.sqrt(16) → 4 | 4.0 |
| 10 | İç içe döngüde tur = dış × iç her zaman | İç sınır dış değişkene bağlıysa tur tur say |
Sınav taktiği
Çıktı (tracing) soruları: Kâğıdın kenarına iz tablosu çiz: her değişkene bir sütun, koşula bir sütun, ekrana yazılana bir sütun. Kodu satır satır çalıştır. Bir değişken değiştiğinde yeni değeri alta yaz. print ile println’ı ayır: println’dan sonra yeni satır. En çok hata ilk turda, son turda ve döngüden çıktıktan sonraki değerde yapılır; bu üçünü ayrıca kontrol et.
Metot yazma soruları: Kısmi puan şu sırayla gelir:
- Başlık:
public static <dönüş tipi> <ad>(<tip> <param>). Cevap evet/hayır ise boolean, sayı ise int ya da double, metin ise String, sadece yazdırıyorsa void. - Sonuç değişkenini başlat:
int sum = 0;,int count = 0;,int max = arr[0];. - Döngü ve içindeki koşul.
- return (void değilse), döngünün dışında.
- Bir örnekle kâğıt üstünde test.
Hiçbir fikrin yoksa bile 1. ve 2. adımları yaz. Boş kâğıt sıfır puan.
Hata bulma soruları: Sırayla tara: her satırın sonunda ; var mı, süslü parantezler eşleşiyor mu, kullanılan her değişken o blokta tanımlı mı (scope), tipler uyuşuyor mu (double → int), String çift tırnak mı, char tek tırnak mı, if içinde = mi == mi.
Çözümlü karışık örnek 1: döngü + koşul
int total = 0;
for (int i = 1; i <= 4; i++) {
if (i % 2 == 0) total += i * i;
else total -= i;
}
System.out.println(total);
i i % 2 == 0 ? işlem total
1 F total -= 1 -1
2 T total += 4 3
3 F total -= 3 0
4 T total += 16 16
5 koşul 5 <= 4 F → çık
16
Çözümlü karışık örnek 2: metot + dizi + pass-by-value
static int f(int[] a, int k) {
a[k] += 10;
k++;
return a[k];
}
// main içinde:
int[] arr = {5, 1, 4};
int k = 0;
System.out.println(f(arr, k) + " " + k + " " + arr[0]);
1 0 15
Üç şeyi ayrı ayrı düşün:
a[0] += 10: dizi referansla geldiği için main’dekiarr[0]15 oldu.k++: metodun kendi k kopyası 1 oldu. main’deki k 0 kaldı.return a[1]: 1.
Aynı satırda üç farklı kural çalışıyor; vize sorusu tam olarak böyle görünür.
Soru tipi → hangi sayfaya dön
Bir soruyu yanlış yaptıysan hangi kuralı kaçırdığını bul ve o sayfaya dön. Aşağıdaki tablo soruların çoğunu tek bir kurala bağlıyor:
| Soruda gördüğün | Kontrol edeceğin kural | Sayfa |
|---|---|---|
/ ve iki int | kesilir, yuvarlanmaz | Operatörler (2. hafta) |
"..." + sayı + sayı | soldan sağa birleştirme | Operatörler, Scanner ve String |
x++ bir ifadenin içinde | eski değer kullanılır | Scanner ve String (2. hafta) |
char ile + | sonuç int | Değişkenler (2. hafta) |
| else if zinciri | sadece ilk true dal | if/else ve switch (3. hafta) |
&& / || sağında ++ | kısa devre | if/else ve switch |
| switch, break eksik | fall-through | if/else ve switch |
| iç döngü sınırı dış değişkene bağlı | tur tur say | Döngüler (4. hafta) |
| metot parametreyi değiştiriyor | pass-by-value | Metotlar (5. hafta) |
| metot dizi elemanını değiştiriyor | referans, çağıran görür | Diziler (6. hafta) |
b = a sonra b[i] = ... | alias | Dizi algoritmaları (7. hafta) |
Integer listesinde remove(sayı) | indeks siler | Dizi algoritmaları ve ArrayList |
Son gece kontrol listesi
- Scanner’ın üç satırını (import, new, nextInt) ezbere yazabiliyor musun?
1 + 2 + "A"ile"A" + 1 + 2farkını açıklayabiliyor musun?- Sola yaslı, ters ve sağa yaslı yıldız üçgenini döngü sınırlarıyla yazabiliyor musun?
- isPrime, sumDigits, max, countDivisors, getSeason metotlarını bakmadan yazabiliyor musun?
- Bir dizinin toplamını, ortalamasını (double!) ve en büyüğünü bulan metotları yazabiliyor musun?
remove(1)ileremove(Integer.valueOf(1))farkını biliyor musun?
Hepsine evet diyorsan aşağıdaki soruları çöz ve yanlışlarını not et.
Sık yapılan hatalar
| Yanlış düşünce | Doğrusu |
|---|---|
| Tracing’de kafadan hesap yeter | İz tablosu çiz; ilk, son tur ve döngü sonrası |
print ile println aynı | print satırda kalır |
| Yazma sorusunda sadece tam kod puan alır | Başlık ve döngü kısmi puan getirir |
| do-while’da continue gövdenin başına döner | Koşula gider |
| char argüman alan metot yoksa derlenmez | char int’e genişler |
| long argüman int metoduna gider | Daraltma yok; double’a genişler |
| Blok içinde tanımlanan değişken sonra da var | Scope biter, cannot find symbol |
Kendini test et
Sınavdaki gibi İngilizce sorular. Önce kâğıt kalemle çöz, sonra cevabı aç.
What is printed?
System.out.println(5 + 7 / 2 * 2 + "x" + 5 % 3);Cevabı göster
Önce * / %: 7 / 2 = 3, 3 * 2 = 6, 5 % 3 = 2. Sonra soldan sağa +: 5 + 6 = 11 (sayı), 11 + "x" = "11x", "11x" + 2 = "11x2".
What is printed?
int a = 3;
int b = a++ * 2 + --a;
System.out.println(a + " " + b);Cevabı göster
Soldan sağa: a++ değer 3 verir, a = 4. 3 * 2 = 6. --a önce azaltır: a = 3, değer 3. b = 6 + 3 = 9.
What is printed?
char c = 'b';
int x = 0;
switch (c) {
case 'a': x += 1;
case 'b': x += 2;
case 'c': x += 3; break;
default: x += 10;
}
System.out.println(x);Cevabı göster
case 'b'den girilir: x = 2. break yok, case 'c'ye düşer: x = 5, break. case 'a' üstte kaldığı için çalışmaz, default'a ulaşılmaz.
What is printed?
int pairs = 0;
for (int i = 1; i <= 4; i++)
for (int j = i + 1; j <= 4; j++)
if ((i + j) % 2 == 1) pairs++;
System.out.println(pairs);Cevabı göster
i < j olan çiftler: (1,2) (1,3) (1,4) (2,3) (2,4) (3,4). Toplamı tek olanlar: (1,2)=3, (1,4)=5, (2,3)=5, (3,4)=7. Dört çift.
What is printed?
int n = 3, s = 0;
do {
n--;
if (n == 1) continue;
s += n;
} while (n > 0);
System.out.println(n + " " + s);Cevabı göster
Tur 1: n = 2, s = 2, koşul 2 > 0 T. Tur 2: n = 1, continue → do-while'da continue doğrudan koşula atlar: 1 > 0 T. Tur 3: n = 0, s = 2 + 0 = 2, 0 > 0 F → çık.
What is printed?
static int f(int[] a, int k) {
a[k] += 10;
k++;
return a[k];
}
// in main:
int[] arr = {2, 4, 6, 8};
int idx = 1;
int r = f(arr, idx);
System.out.println(r + " " + idx + " " + arr[1]);Cevabı göster
Dizi referans olarak gider: a[1] += 10 main'deki diziyi değiştirir, arr[1] = 14. k ise int, kopyası artırılır; main'deki idx 1 kalır. Metot a[2] = 6 döndürür.
What is printed?
String w = "Programming";
int cnt = 0;
for (int i = 0; i < w.length(); i++) {
if (w.charAt(i) == 'm' || w.charAt(i) == 'g') cnt++;
}
System.out.println(cnt + " " + w.indexOf('g') + " " + w.substring(3, 6));Cevabı göster
P0 r1 o2 g3 r4 a5 m6 m7 i8 n9 g10. m iki, g iki: 4. İlk g 3. indekste. substring(3, 6) → 3, 4, 5: "gra".
What is printed?
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < 4; i++) list.add(i * i);
list.add(1, 7);
list.remove(Integer.valueOf(4));
System.out.println(list + " " + list.get(2));Cevabı göster
Döngü: [0, 1, 4, 9]. add(1, 7): [0, 7, 1, 4, 9]. 4 değerini sil: [0, 7, 1, 9]. get(2) = 1.
Only these two methods exist. What is printed?
static String t(int x) { return "I" + x; }
static String t(double x) { return "D" + x; }
// in main:
System.out.println(t('A'));
System.out.println(t(5L));
System.out.println(t(9 / 2));Cevabı göster
D5.0
I4
char için tam eşleşme yok; char int'e genişler, 'A' = 65 → t(int). long int'e daraltılamaz ama double'a genişler → "D5.0". 9 / 2 = 4 (int) → t(int).
What is printed?
double avg = 0;
int[] m = {7, 8, 10};
for (int v : m) avg += v;
avg /= m.length;
System.out.printf("%.2f %d%n", avg, (int) avg);Cevabı göster
avg double olduğu için toplama 25.0, bölme double: 25.0 / 3 = 8.333... %.2f → 8.33. Cast keser: 8.
Find the compile-time error. Which line is it, and why?
int total = 0;
for (int i = 0; i < 3; i++) {
int sq = i * i;
total += sq;
}
double avg = total / 3;
String msg = "avg";
if (msg == "avg") System.out.println(sq);Cevabı göster
sq döngü bloğunun içinde tanımlandı, blok bitince yok olur: cannot find symbol. Diğer iki satır derlenir ama kötü: total / 3 int bölme (mantık hatası riski), msg == "avg" String'i == ile karşılaştırıyor (equals kullanılmalı).
Write a static method isPalindrome(int n) that returns true if a non-negative integer reads the same backwards (e.g. 1221).
Cevabı göster
n döngüde 0'a ineceği için orijinal değeri baştan sakla.public static boolean isPalindrome(int n) { int original = n, rev = 0; while (n > 0) { rev = rev * 10 + n % 10; n /= 10; } return rev == original;}Test: 1221 → true, 123 → false, 7 → true.
Doğrulama: Tüm sorular ve çözümlü örnekler JDK 26 ile çalıştırıldı (verify/SEN1001/W08.java). Hata bulma sorusu verify/SEN1001/err/Find.java javac ile derlenerek kontrol edildi.