Birleştirme
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.Parsefı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:
classileCalculatorsınıfı tasarlamakConsole.ReadLinevedouble.Parseile girdi almak- aritmetik metotlar yazmak ve
DivideByZeroExceptionfırlatmak switchvewhileile menü döngüsü kurmaktry/catchile 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
-
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.
-
İ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
-
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ı"); }