Durch Null teilen mit Try - Catch abfangen.

05/05/2013 17:31 Benjihz#1
hey,
Ich hab ein kleines Tool geschrieben wo zwei Zufallszahlen aus dem Datum usw generiert werden, und diese mit der entsprechenden Grundrechenart ausgerechnet werden. Nun hab ich versucht durch Null zu teilen, als Ergebnis bekam ich "+unendlich" aus. Eigentlich hatte ich einen Ausnahme-Fehler erwartet, und wollte das durch Null teilen mit einer Try - Catch Abfrage abfangen. Wie soll ich das machen? Es ist alles auf dem Screen.

[Only registered and activated users can see links. Click Here To Register...]


MfG :)
05/05/2013 17:45 dready#2
Den Divisor auf 0 Checken ;)
Ist imo auch der sauberere Weg da ne Exception deutlich Länger braucht.

Warum das ganze so ist, dein Compilere sieht das als einen float an und in der Standartisierung an die er sich hält, schmeisst er keine Exception wie du es gewohnt bist sondern setzt den Wert entsprechend, in diesem Fall positiv Infinit

IEEE floating point - Wikipedia, the free encyclopedia
05/05/2013 18:03 Benjihz#3
Quote:
Originally Posted by dready View Post
Den Divisor auf 0 Checken ;)
Ist imo auch der sauberere Weg da ne Exception deutlich Länger braucht.

Warum das ganze so ist, dein Compilere sieht das als einen float an und in der Standartisierung an die er sich hält, schmeisst er keine Exception wie du es gewohnt bist sondern setzt den Wert entsprechend, in diesem Fall positiv Infinit

IEEE floating point - Wikipedia, the free encyclopedia
Wenn ich mit ner If - Abfrage den Divisor auf Null checke, wie soll ich dann etwas angeben was er anstatt der Aufgabe macht? Bei Try macht er wenn ein Fehler unterläuft ja unten direkt weiter, bei einer If ja nicht. Logischerweise.. :D
05/05/2013 18:23 dready#4
PsydoCode

If x
{
rechne
}
else
{
werfe fehler
}
05/05/2013 19:52 #SoNiice#5
Wo ist das Problem? Frag doch einfach die Textbox auf "0" ab?
05/05/2013 21:11 Benjihz#6
Quote:
Originally Posted by SoNiice View Post
Wo ist das Problem? Frag doch einfach die Textbox auf "0" ab?
In dem Programm ging es darum Ausnahme-Fehler per Try-Catch abzufangen.
Hab ich halt als sone Art Übung gemacht, dazu dann halt noch der Zufallsgenerator.

ps. Wenn schon will ich ein Label abfragen.. ^^
05/05/2013 21:42 Else#7
Dann frage doch das Label ab? Es müsste ebenso den Text zurückgeben. Und die Eingabe erfolgt doch über eine TextBox? Wieso also nicht das machen, was SoNiice vorgeschlagen hat?

Du gehst viel zu viele Umwege, für Dein Ziel. Und extra das mit try-catch abzufangen, ist noch umständlicher, als es wirklich von Nöten ist.
05/05/2013 21:55 Benjihz#8
Nein, die Textbox ist nur da um die Null dahin zu cheaten. Die Zahlen werden per Zufallsgenerator über einen klick auf das fette label erstellt.
05/06/2013 10:21 dready#9
Versteh zwar immernochnicht so genau warum das Ding ganz entgegen der Art wie es gedacht ist ne Exception werfen soll :P
Aber wenn es hier tatsächlich nur darum geht das das ganze ein reines Übungsprojekt ist um mit Exception zu spielen

Code:
            
try
            {
                float b = 1.0f;
                float a = 0.0f;
                float c = b / a;
                if (float.IsNaN(c) | float.IsPositiveInfinity(c) | float.IsInfinity(c) | float.IsNegativeInfinity(c))
                {
                    throw new System.ArgumentException("Exception occured");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
05/06/2013 16:24 abc...xyz#10
Vllt per Timer, der regelmäßig abfragt, ob der Text des Labels "0" ist, oder was dachtest du dir?
05/06/2013 16:31 dready#11
? Timer klingt sehr schräg für mich

einfach da wo jetzt steht

{
rechnen
}

ein
if label.text != "0"
{
rechne
}
else
{
schmeiß fehler
}

Obwohl sich bei mir alles anfängt zu drehn wenn man zahlen in nem label speichert :P
05/06/2013 16:34 kissein#12
Code:
            try 
            {
                //stuff
            }
            catch (DivideByZeroException) 
            {
                //error handling
            }
[Only registered and activated users can see links. Click Here To Register...]
05/06/2013 16:46 qkuh#13
Quote:
Originally Posted by abc...xyz View Post
Vllt per Timer, der regelmäßig abfragt, ob der Text des Labels "0" ist, oder was dachtest du dir?
Bitte nicht :D
05/06/2013 16:59 dready#14
Hey kissein :)

Probier mal folgendes

Code:
            try
            {
                float a = 1.0f;
                float b = 0.0f;
                float c = a / b;
            }
            catch (DivideByZeroException)
            {
                MessageBox.Show("blub");
            }
Dann wunder dich ne Runde :D

Just Kidding, wie gesagt, das Problem hier liegt minimal versteckt und deine Lösung würde nicht funktionieren.

.net schaut auf den String im Label wie ich das versteh, logischerweise würd das nur Käse ergeben, also ist es clever genug sich zu denken, das convert ich besser mal, da es eine Division ist, ist Float ne Gute wahl.
Ab diesem Punkt rechnet es mit Floats und Floats werfen nach der Standatisierung die C# nutzt keine direkte Exception sondern setzen bei einer Exception das return Value entsprechend als positive/negativ infinite oder NaN. Also dürfte von meine Verständnis her auch keine Exception geworfen werde. Wenn ich mich aber irre klärt mich gern auf :)
05/06/2013 17:27 kissein#15
@ dready
ich muss gestehen das ich mir solche Threads nie im Detail ansehen sondern nur überfliege, deshalb auch minimalste Kommentare in meinem Beitrag. Sollte im OP das alles sein dann hast natürlich recht, ging eigentlich davon aus, dass Konvertierungen vor den eigentlichen Berechnungen gemacht worden wären.