Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
weiß jemand warum Java diesen Fehler ausspuckt? "Variable might not hav been initialized"
Ich seh lerider den Fehler nicht. Weiß heir jemand wieso java den Fehler meldet?
Ich habe es etwas umgeändert. Das Richtige, also das welches funktioniert hänge ich nach.
Du hast da in beiden Fällen ein paar if-Anweisungen zur Berechnung der Ausgabe. Der Java-Compiler erkennt nicht, dass du alle Fälle abgedeckt hast und denkt deshalb, dass es einen Fall gibt, in dem "ausgabe" keinen Wert bekommt.
Lösung: Formulier es so, dass es diese Struktur hat:
Nein daran liegt es nicht sondern das er der lokalen Variablen einfach keinen (definitiven) Wert zugewiesen hat. Das Mindeste wäre ein String ausgabe = null;. Das Ganze läuft unter dem Namen "definite assignment" und kann gerne nachgelesen werden, z.B. hier Definite Assignment.
Ihr habt natürlich Recht, dass die Ursache die nicht-initialisierte Variable ist. Es ist aber eine schlechte Idee, eine Variable mit null zu initialisieren und danach mit einem if-else-if-Konstrukt einen Wert zuzuweisen. Grund: Wenn die Variable nicht initialisiert ist, sucht der Compiler bei der ersten Verwendung rückwärts, ob sie auf allen Pfaden initialisiert wird. Wenn er beweisen kann, dass sie auf allen Pfaden initialisiert wird, ist das Ok und es gibt keiner Fehlermeldung. Deshalb funktioniert folgenden Code immer:
Java:
String x;
if(...) {
x = ...;
} else {
x = ...;
}
Es ist für den Compiler dann klar: Einer der beiden Pfade muss genommen werden, also wird x immer einen Wert haben. In diesem Fall ist das nicht so klar:
Java:
String x;
if(...) {
x = ...;
} else if(...) {
x = ...;
}
In diesem Fall wird der Compiler prüfen, ob das else-if immer zutrifft, wenn das if nicht zutrifft - denn dann würde x immer einen Wert haben und alles wäre Ok. Wenn er das nicht kann, gibt er die Fehlermeldung aus, dass x möglicherweise nicht initialisiert ist. Das deutet auf ein mögliches Problem im Code hin.
Mit der vorgeschlagenen Lösung, String x = null; zu benutzen und danach in die if-Anweisungen zu verzweigen, kann man sich eine NullPointerException einhandeln, wenn der Compiler Recht hatte und möglicherweise keiner der if-else-if-Pfade zur Initialisierung von x führt. Deshalb behebt diese Vorgehensweise zwar das Symptom, aber das eigentliche Problem des möglichen fehlenden Pfades bleibt vorhanden.
Deshalb: Es ist besser, seine Variablen in Methoden nicht direkt beim Deklarieren mit null zu initialisieren, denn damit schaltet ihr diverse Prüfungen und Optimierungen (!) des Compilers aus, ob euer Code sinnvoll ist.