Barış

WFN Üye
Konular
587
Mesajlar
587
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
Kastamonu
Web Sitesi
Var
Alanı
Google ADS
1/1
Konu sahibi
Java’da bir işlemin sonucunu kontrol etmek için önce sonucu bir değişkene atayın, ardından beklenen durumla karşılaştırın. Koşula göre farklı işlem yapılacaksa if-else, birden fazla sabit seçenek varsa switch, programın test aşamasında beklenen ve gerçek değeri karşılaştırmak için ise test doğrulamaları kullanılır. Sonucun yalnız ekrana yazdırılması, doğru olduğu anlamına gelmez; değerin beklenen sonuçla karşılaştırılması gerekir.

Sonucu koşula göre kontrol etme​


Örneğin iki sayının toplamını hesaplayıp sonucun beklenen değere eşit olup olmadığını kontrol edebilirsiniz:

Java:
public class SonucKontrolu {
    public static void main(String[] args) {
        int sayi1 = 12;
        int sayi2 = 8;
        int toplam = sayi1 + sayi2;

        if (toplam == 20) {
            System.out.println("Sonuç doğru: " + toplam);
        } else {
            System.out.println("Sonuç beklenenden farklı: " + toplam);
        }
    }
}

Burada toplam == 20 ifadesi, toplam değişkeninin 20 olup olmadığını kontrol eder. Sonuç 20 ise ilk blok, değilse else bloğu çalışır. Atama yapmak için kullanılan tek eşittir (=) ile karşılaştırma yapmak için kullanılan çift eşittir (==) birbirine karıştırılmamalıdır.

Metinleri == ile karşılaştırmayın. Java’da metin içeriğini kontrol etmek için equals() kullanılır:

Java:
String durum = "basarili";

if ("basarili".equals(durum)) {
    System.out.println("İşlem tamamlandı.");
} else {
    System.out.println("İşlem başarısız.");
}

Sabit metni solda kullanmak, durum değişkeni null olduğunda oluşabilecek NullPointerException riskini azaltır. durum == "basarili" ifadesi içerik yerine çoğunlukla nesne referanslarını karşılaştırdığı için güvenilir değildir.

Sonucu aralık veya birden fazla koşulla kontrol etme​


Bir puanın hangi aralıkta olduğunu kontrol ederken koşulları açıkça sıralayın:

Java:
int puan = 78;

if (puan >= 85) {
    System.out.println("Çok iyi");
} else if (puan >= 70) {
    System.out.println("İyi");
} else if (puan >= 50) {
    System.out.println("Geçti");
} else {
    System.out.println("Kaldı");
}

Koşullar yukarıdan aşağıya değerlendirilir ve doğru olan ilk blok çalışır. Bu nedenle daha geniş bir koşulu üstte yazmak, alttaki koşulların hiç çalışmamasına yol açabilir. Örneğin puan >= 50 koşulunu en başa yazarsanız 70 veya 85 puan için özel sonuçlara ulaşılamaz.

Sabit seçenekleri kontrol etmek için switch de kullanılabilir:

Java:
String durum = "bekliyor";

switch (durum) {
    case "basarili":
        System.out.println("İşlem tamamlandı.");
        break;
    case "bekliyor":
        System.out.println("İşlem henüz sonuçlanmadı.");
        break;
    default:
        System.out.println("Bilinmeyen durum.");
}

break yazılmazsa uygun durumdan sonraki case blokları da çalışabilir. Bu davranış özellikle eski switch kullanımında sık görülen bir hatadır.

Sonucun ne anlama geldiğini ayırma​


Bir Java ifadesinin ürettiği sonuç ile bu sonuca dayanarak verilen karar aynı şey değildir. Örneğin bir bölme işleminin sonucunu kontrol ederken sıfıra bölme ihtimalini işlemden önce ele almak gerekir:

Java:
int bolunen = 10;
int bolen = 0;

if (bolen == 0) {
    System.out.println("Bölme yapılamaz: bölen sıfır.");
} else {
    double sonuc = (double) bolunen / bolen;
    System.out.println("Sonuç: " + sonuc);
}

Buradaki kontrol, yalnızca sonucun beklenip beklenmediğini değil, işlemin güvenli biçimde yapılıp yapılamayacağını belirler. Bir hata mesajı görülmesi her zaman Java’nın yanlış hesap yaptığını kanıtlamaz; çoğu zaman girdinin geçersiz olduğunu gösterir. Bu durumda önce kullanılan değişkenlerin değerlerini, türlerini ve hesaplamaya girmeden önceki koşulları kontrol edin.

Ondalıklı sayıları doğrudan == ile karşılaştırmak da beklenmeyen sonuç verebilir. Hesaplama sonucunu küçük bir toleransla kontrol etmek daha uygundur:

Java:
double gercek = 0.1 + 0.2;
double beklenen = 0.3;
double tolerans = 0.000001;

if (Math.abs(gercek - beklenen) < tolerans) {
    System.out.println("Sonuç kabul edilebilir.");
} else {
    System.out.println("Sonuç beklenenden farklı.");
}

Bu kontrol, iki sayının bilgisayardaki kayan nokta gösterimi nedeniyle oluşabilecek çok küçük farkları göz ardı eder. Tolerans değeri uygulamanın hassasiyetine göre belirlenmelidir; para gibi hassas hesaplarda yalnızca double karşılaştırmasına güvenmek yerine uygun bir sayı gösterimi ve yuvarlama kuralı kullanılmalıdır.

Programın sonucunu testle doğrulama​


Sonucu yalnız çalışma sırasında ekrana yazdırmak yerine otomatik testle de doğrulayabilirsiniz. Testte temel ayrım şudur: gerçek sonuç programın ürettiği değer, beklenen sonuç ise testin doğru kabul ettiği değerdir. İki değer uyuşmuyorsa test başarısız olur ve hangi beklentinin karşılanmadığı görülür.

Örneğin hesaplama kodunu ayrı bir metoda taşıyın:

Java:
public class Hesaplama {
    public static int topla(int a, int b) {
        return a + b;
    }
}

Bu metodu çağırarak önce gerçek sonucu görebilirsiniz:

Java:
int gercekSonuc = Hesaplama.topla(12, 8);
System.out.println(gercekSonuc); // 20

Beklenen sonuç 20 olduğu için çıktı 20 ise bu örnek için hesaplama doğrudur. Ancak bu, metodun bütün olası girdilerde doğru olduğunu kanıtlamaz. Negatif sayılar, sıfır ve sınır değerleri ayrıca kontrol edilmelidir. Bir test başarısız olduğunda önce beklenen değerin gerçekten doğru yazıldığını, sonra metoda gönderilen girdileri ve en son hesaplama kodunu inceleyin.
Kontrol yöntemiNe zaman kullanılır?Sonuç ne gösterir?
if-elseProgram çalışırken karar vermek içinKoşula göre hangi kodun çalışacağını belirler
switchSabit seçenekleri ayırmak içinEşleşen seçeneğin davranışını gösterir
equals()Metin içeriğini karşılaştırmak içinMetinlerin içerik olarak eşit olup olmadığını gösterir
Test doğrulamasıKodun beklenen çıktıyı üretip üretmediğini sınamak içinBelirli bir girdi ve beklenti için test sonucunu gösterir
Hata ayıklama veya günlük kaydıAra değerleri incelemek içinHesaplamanın hangi aşamada beklenenden saptığını gösterir
Sonuç beklenenden farklıysa geçici olarak girdi, ara değişken ve çıktı değerlerini yazdırabilir veya hata ayıklayıcıda bu satırlara durma noktası koyabilirsiniz. İnceleme bittikten sonra hassas bilgileri içeren geçici çıktıları kaldırın; özellikle parola, erişim anahtarı ve kişisel verileri konsola veya günlük dosyasına yazdırmayın. Böylece yalnız son değeri değil, sonuca götüren adımları da doğrulamış olursunuz.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic