Warum funktioniert dieser Java Code nicht (Alter berechnen)?
Hier ist der Code:
int geburtstag;
int geburtsmonat;
int geburtsjahr;
int aktuellertag;
int aktuellermonat;
int aktuellesjahr;
int alter;
int subtraktionsvariable;
System.out.println("Hallo, an was für einem Tag hast du Geburtstag? Ich habe am 7.");
Kon.readInt();
geburtstag = Kon.readInt();
System.out.println("Und an welchem Monat hast du Geburtstag? Ich hab am 3.");
Kon.readInt();
geburtsmonat = Kon.readInt();
System.out.println("In welchem Jahr hast du Geburtstag?");
Kon.readInt();
geburtsjahr = Kon.readInt();
System.out.println("Welcher Tag ist heute?");
Kon.readInt();
aktuellertag = Kon.readInt();
System.out.println("Welcher Monat ist heute?");
Kon.readInt();
aktuellermonat = Kon.readInt();
System.out.println("Welches Jahr haben wir heute?");
Kon.readInt();
aktuellesjahr = Kon.readInt();
if (aktuellermonat > geburtsmonat) {
subtraktionsvariable = 0;
}
else {
if (aktuellermonat == geburtsmonat) {
if (aktuellertag > geburtstag) {
subtraktionsvariable = 0;
}
else {
subtraktionsvariable = 1;
}
}
else {
if (aktuellermonat < geburtsmonat) {
subtraktionsvariable = 1;
}
}
}
alter = aktuellesjahr - geburtsjahr - subtraktionsvariable;
}
Als Fehler steht da:
"variable subtraktionsvariable might not have been initialized"
3 Antworten
int subtraktionsvariable;
musst du zu
int subtraktionsvariable = 0;
machen.
Dann ist "subtraktionsvariable" initialisiert.
Das sagt die Fehlermeldung doch... Weise deinem Variablen direkt einen Wert zu wenn du sie definierst, dann bekommst du solche Fehlermeldungen nicht
Das macht zwar keinen Sinn, geht aber auch. 'subtraktionsvariable' muss in jedem Fall einen Wert haben, bevor du mit ihr rechnen kannst/darfst. Du musst dir also deinen Code ansehen, und nachsehen in welchem Fall die Variable nie einen Wert bekommt (das passiert in deinem allerletzten 'else'-Fall. Du machst dort eine erneute if-Abfrage, aber wenn die fehl schlägt hast du keinen else-Fall, und 'subtraktionsvariable' erhält in diesem Fall nie einen Wert).
Deswegen initialisiert man normalerweise direkt eine Variable mit einem default-Wert (wie zB '0'), damit es erst gar nicht so weit kommen kann dass die Variable keinem Wert hat
"variable subtraktionsvariable might not have been initialized"
Steht da. Es gibt mindestens einen Fall, in dem subtraktionsvariable keinen Wert zugewiesen bekommt. Du verwendest diese Variable aber nachher - und das deutet auf einen unbewussten Logikfehler hin.
Indem du einen Wert zuweist. Logo, oder? Du musst ja eine Idee haben, welchen Wert die Variable haben soll.
was meinst du mit direkt zuweisen? Wenn ich das mache dann habe ich meine Aufgabe nicht erfüllt. Es muss unter diesen if Bedingungen stattfinden
Wo/wie du das machst, ist dem Compiler ziemlich egal, so lange du
- dich an die Syntaxregeln hältst
- die Variable noch vor Nutzung irgendeinen expliziten Wert erhalten hat
was meinst du mit direkt zuweisen? Wenn ich das mache dann habe ich meine Aufgabe nicht erfüllt. Es muss unter diesen if Bedingungen stattfinden