Zwracanie wartości przez metodę w przypadku wystąpienia wyjątku

0

W jaki sposób mogę sprawdzać, czy użytkownik nie dzieli przez zero, jeśli buduję kalkulator z wykorzystaniem metod, którym przekazuję parametry z maina? Kompilator wymaga, aby metoda zwracała też wartość w przypadku wystąpienia wyjątku. Macie jakiś pomysł jak wyjść z tej sytuacji? Stworzyć voida i po prostu wypisywać w metodzie dany przypadek?

static double Dzielenie(double x, double y)
{
try
{
return x/y;
}
catch(DivideByZeroException)
{
Console.WriteLine("Nie możesz dzielić przez zero!");

        }

edit: Wrzuciłem Try Catch do maina przy wywołaniu metody, ale działa mi tylko w przypadku jeśli operuję na intach, a dla double niestety nie.

1
public class Wynik
{
public bool IsValid{get;set;}
public double Result{get;set;}
}

public Wynik Dzielenie(double x, double y)
{
var w = new Wynik();
w.IsValid = true;
w.Result = 0;
try
{
w.Result = x/y;
return w;
}


catch
{
w.IsValid = false;
return w;
}

}

Może spróbuj coś takiego.

1

Widzę że brakuje ci podstaw z języka C# . jak dzielisz liczby typu double przez zero to dostajesz dodatnią nieskończoność , ujemną nieskończoność albo NaN - wartość nie będąca liczbą .
Odnośnie wyjątków .
Jak zrobisz takie coś :

using System;
public class Program
{
    public static void Main()
    {
            MetodaA(10, 0);
    }
    static int MetodaC(int a, int b)
    {
        return a / b;
    }
    static int MetodaB(int a, int b)
    {
            return MetodaC(a, b);    
    }
    static int MetodaA(int a, int b)
    {
        return MetodaB(a, b);
    }
}

to dostaniesz taki komunikat

Wyjątek nieobsłużony: System.DivideByZeroException: Nastąpiła próba podzielenia przez zero.
   w Program.MetodaC(Int32 a, Int32 b) w  C#\ConsoleApp\Program.cs:wiersz 10
   w Program.MetodaB(Int32 a, Int32 b) w  C#\ConsoleApp\Program.cs:wiersz 14
   w Program.MetodaA(Int32 a, Int32 b) w  C#\ConsoleApp\Program.cs:wiersz 18
   w Program.Main() w  C#\ConsoleApp\Program.cs:wiersz 6

Wyjątek nieobsłużony ani w metodzie A ani w B ani w C ani w Main
Wyjątek jest przekazywany w górę stosu wywolań funkcji.
Jak będziesz chciał przechwycić wyjątek w metodzie A, B lub C to dostaniesz komunikat, że nie wszystkie ścieżki kodu zwracają wartość
więc najlepiej jest przechwycić wyjątek w metodzie Main

using System;
public class Program
{
    public static void Main()
    {
        try
        {
            MetodaA(10, 2);
        }
        catch (DivideByZeroException e)
        {
            Console.WriteLine(e.Message);
        }
    }
    static int MetodaC(int a, int b)
    {
        return a / b;
    }
    static int MetodaB(int a, int b)
    {
         return MetodaC(a, b);    
    }
    static int MetodaA(int a, int b)
    {
        return MetodaB(a, b);
    }
}
2
mivara napisał(a):

W jaki sposób mogę sprawdzać, czy użytkownik nie dzieli przez zero

if (dzielnik == 0)
{
    Console.WriteLine("Droga amebo, nie dziel przez zero!");
}

I wyjątek nie jest do niczego potrzebny, bo że ktoś spróbuje, to jest więcej niż pewne, a nie wyjątkowe.

1 użytkowników online, w tym zalogowanych: 0, gości: 1