Nicht alle Codepfade geben ein Wert zurück?
Ich bekomme den Fehler, dass nicht alle Codepfade einen Wert zurück geben "Form1.GetKugel()".
Wenn ich das in else stehende so hinstelle ohne else funktioniert es einwandfrei..
ich habe gerade erst angefangen zu lernen und es ist hoffe ich nur ein dämlicher Anfängerfehler :D
private struct Kugel
{
public double radius, sg;
}
private double gew;
private Kugel GetKugel()
{
if (textBox1.Text == "")
{
MessageBox.Show("Bitte trage einen Wert ein", "Hinweis", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
else if (textBox1.Text.Length > 0)
{
MessageBox.Show("Bitte trage einen gültigen Wert ein", "Hinweis", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
textBox1.Clear();
}
else
{
Kugel kug;
kug.radius = Convert.ToDouble(textBox1.Text) / 2;
if (radioButton1.Checked) kug.sg = 1.4D;
else if (radioButton2.Checked) kug.sg = 2.7D;
else if (radioButton3.Checked) kug.sg = 3.0D;
else if (radioButton4.Checked) kug.sg = 7.87D;
else kug.sg = 11.3D;
return kug;
}
}
3 Antworten
Hauptproblem: Schlechtes Design! Hier ist Oberflächenbehandlung total in die Verwaltung der Kungeln reingemischt.
Die Funktion
Kugel GetKugel()
Liefert nicht immer eine Kugel zurück!
Manchmal beschwert sie sich über leere Eingabe, oder ungültige Eingabe.
Eine Kugel liefert sie nur zurück, wenn alle Eingaben passen.
Eine solche Funktion solltest Du nur aufrufen, wenn alles passt und dann eine Kugel zurückliefern kann.
Andernfalls musst Du in den schlechten Fällen wenigstens null zurückgeben.
(P.S. wieso struct und nicht Class Kugel? Wieso generierst Du eine Kugel in sich selbst?)
"Wieso generierst Du eine Kugel in sich selbst"
Dachte ich auch erst. Sieht aufgrund der Einrückung nur so aus. GetKugel ist eine Methode der Form.
Hängt ein bisschen davon ab, wo und wie Du GetKugel() benutzen willst.
na ja weiter unten sind nur ein paar Berechnungen aber mehr nicht, ist nur ein übungsprogramm welcher die Masse des körpers ausrechnen soll
Hängt ein bisschen davon ab, wo und wie Du GetKugel() benutzen willst.
Mach die Tests, ob alle Eingaben passen da wo Du die Kugel haben willst und rufe nur dann GetKugel() auf.
Oder schreibe eben
return null;
in den if und den ersten else-Zweig rein.
Und mach aus dem Struct Kugel bitte sowas:
private class Kugel
{
public double radius{ get; set; }
public double rg{ get; set; }
}
ok aber aus der struct eine class? und jetzt bekomme ich den Fehler das die Variable kug nicht zugewiesen sei (nur in dem else baum, wo anders kein thema).. wie weise ich diese zu?
Steh ich aufm Schlauch, oder wird der letzte else-Zweig nie erreicht? Wenn die Textbox leer ist, wird der erste Block ausgeführt. Ansonsten ist sie ja nicht leer, und dann ist die zweite Bedingung immer true.
ich habe das gerade getestet und interessanter weise kann ich durch meinen failsafe welche nur zahlen erlaubt, keine zahlen mehr eingeben obwohl das vorher problemlos geklappt und somit erreiche nur diesen und dann stürzt es ab mit "Input string was not in a correct format"
aber das ist mir auch gerade aufgefallen, dass die ersten beiden dasselbe machen..
Deine beiden Fehlerdialogs-Verzweigungen returnen keinen Wert.
ist das denn zwingend notwenig, bei diesem design, schließlich wird nur ein wert geprüft ob dieser vorhanden ist oder nicht
Ja ist es, denn in deiner Funktionsdeklaration gibst du an, dass deine Funktion zwingend einen Wert des Typ "Kugel" zurückgibt.
ach so ok.. hätte ich jetzt nicht erwartet xD
ohje.. ok und wie mache ich das am einfachsten?