CodeBlanks Logo Icon CodeBlanks

Birleştirme

C# kursu · Başlangıç · Ders 23/116

Tüm parçaları birleştirerek çalışan bir hesap makinesi yazarsın.

Hata yönetimi

Son derste hesap makinesine hata yönetimi ekleyeceğiz. İki tür hata bekliyoruz:

  • FormatException: kullanıcı sayı yerine harf girerse double.Parse fırlatır.
  • DivideByZeroException: bölme işleminde bölen sıfırsa metot fırlatır.

Bu hataları yakalamak için try bloğuna riskli kodu, catch bloğuna ise hata mesajını yazarız. Böylece program çökmek yerine kullanıcıya açık bir mesaj gösterir.

Proje tamamlandı

Tebrikler! Beş derslik hesap makinesi projeni tamamladın. Bu süreçte şunları öğrendin:

  • class ile Calculator sınıfı tasarlamak
  • Console.ReadLine ve double.Parse ile girdi almak
  • aritmetik metotlar yazmak ve DivideByZeroException fırlatmak
  • switch ve while ile menü döngüsü kurmak
  • try/catch ile hata yönetmek

Bu yapılar gerçek dünya uygulamalarında da aynı şekilde kullanılır.

Uygulama try/catch ile hata yönetimi ekle

Döngü gövdesini try bloğuna al. switch'e default dalı ekle ve bilinmeyen operatör için throw new FormatException("Geçersiz işlem"); yaz. İki catch bloğu ekle: catch (DivideByZeroException) içine Console.WriteLine("Sıfıra bölme hatası");, catch (FormatException) içine Console.WriteLine("Geçersiz giriş"); yaz. Böylece program çökmeden hataları yakalar.

Örnek çözümü göster
Döngü gövdesini try içine al ve iki catch bloğu ekle.
Örnek çözüm:
using System;

class Calculator
{
    public double Add(double a, double b) { return a + b; }
    public double Subtract(double a, double b) { return a - b; }
    public double Multiply(double a, double b) { return a * b; }
    public double Divide(double a, double b)
    {
        if (b == 0) throw new DivideByZeroException("Sıfıra bölme");
        return a / b;
    }
}

class Program
{
    static void Main()
    {
        var calc = new Calculator();
        // Test senaryoları: (işlem, a, b) — bazıları hatalı
        string[][] tests = {
            new string[] { "+", "20", "5" },
            new string[] { "/", "20", "0" },
            new string[] { "?", "20", "5" }
        };
        int i = 0;
        while (i < tests.Length)
        {
            try
            {
                string op = tests[i][0];
                double a = double.Parse(tests[i][1]);
                double b = double.Parse(tests[i][2]);
                double result = 0;
                switch (op)
                {
                    case "+":
                        result = calc.Add(a, b);
                        break;
                    case "-":
                        result = calc.Subtract(a, b);
                        break;
                    case "*":
                        result = calc.Multiply(a, b);
                        break;
                    case "/":
                        result = calc.Divide(a, b);
                        break;
                    default:
                        throw new FormatException("Geçersiz işlem");
                }
                Console.WriteLine(result);
            }
            catch (DivideByZeroException)
            {
                Console.WriteLine("Sıfıra bölme hatası");
            }
            catch (FormatException)
            {
                Console.WriteLine("Geçersiz giriş");
            }
            i++;
        }
    }
}

Kendini test et

  1. Geçersiz sayı girildiğinde hangi istisna fırlar?

    • FormatException
    • DivideByZeroException
    • IndexOutOfRangeException
    • InvalidOperationException
    Cevabı göster

    FormatException — Doğru; double.Parse geçersiz formatta FormatException fırlatır.

  2. İstisna ve yapıyı anlamıyla eşleştir

    FormatException
    Geçersiz sayı formatı
    DivideByZeroException
    Sıfıra bölme
    try
    Korumalı kod bloğu
    catch
    Hata yakalama
  3. catch bloğunu başlat

    try {
        result = calc.Divide(a, b);
    } ____ (DivideByZeroException) {
        Console.WriteLine("Sıfıra bölme hatası");
    }
    Cevabı göster
    try {
        result = calc.Divide(a, b);
    } catch (DivideByZeroException) {
        Console.WriteLine("Sıfıra bölme hatası");
    }

Başlangıç bölümündeki tüm dersler