Java: Ich komme nicht weiter?
Hallo,
ich verstehe einfach diese Aufgabe nicht und komme nicht weiter. Ich soll ein Programm schreiben was das nächste Schaltjahr nach dem angegeben Jahr ausgegeben soll unabhängig ob ein Schaltjahr eingegeben wurde oder nicht.
Hier mein bisheriger Code:
2 Antworten
Hmm, wenn ich deinen Code übernehmen wollte, würde ich es vermutlich so abändern:
Boolean istSchaltjahr(int jahr) {
if (jahr%4==0 && (jahr%100!=0 || jahr%400==0)) return true;
return false;
}
int naechsteSchaltjahr(int jahr) {
//das eingegebene Jahr ein Schaltjahr?
if (istSchaltjahr(jahr)==true) return jahr;
//Ansonsten das nächste Jahr ermitteln was sich restlos durch vier teilen lässt
int naechstes = jahr - jahr%4 + 4;
if (istSchaltjahr(naechstes)==true) return naechstes;
//Wenn das es noch nicht war (was passieren könnte wenn jahr%4 + jahr zum Beispiel 2100 ergibt)
//Dann eben noch mal 4 Jahre drauf.
return (naechstes + 4);
}
Man könnte naechsteSchaltjahr auch mit einer Do-While Schleife lösen, wenn man ganz sicher gehen wollte, aber eigentlich sollte diese Form bereits ausreichen.
Ansonsten halt:
int naechsteSchaltjahr(int jahr) {
//das eingegebene Jahr ein Schaltjahr?
if (istSchaltjahr(jahr)==true) return jahr;
//Ansonsten das nächste Jahr ermitteln was sich restlos durch vier teilen lässt
int naechstes = jahr - jahr%4 + 4;
do {
if (istSchaltjahr(naechstes)==true) break;
naechstes+=4;
} while(true);
return naechstes;
}
Wobei du bei der Syntax noch nachgucken musst, ob das so passt. Hab's freihändig gemacht.
Jo, ginge. Ich wollte nur seine Logik nicht zu sehr überschreiben.
Die Methode istSchaltjahr sieht soweit richtig aus, die anderen beiden habe ich so angepasst und mit kommentaren versehen, hoffe das ist verständlich, sonst einfach nachfragen :)
void setup {
int benutzer;
benutzer = PopUp.readInt("...");
// diese zeile macht so keinen sinn, da du den rückgabewert nicht weiter verarbeitest
istSchaltjahr(benutzer);
// da kannst den rueckgabewert direkt mit einer If pruefen und dann ausgeben ob das jahr ein schaltjahr ist:
if (istSchaltjahr(benutzer)) {
PopUp.print("Das eingegebene Jahr ist ein schaltjahr");
}
else {
PopUp.print("Das eingegebene Jahr ist kein schaltjahr");
}
PopUp.print("Das naechste Schaltjahr waere " + naechsteSchaltjahr(benutzer));
}
int naechsteSchaltjahr(int jahr) {
int zuPruefendesJahr = jahr + 1; // damit das eingegebene jahr nicht zurückgegeben wird, falls dies ein schaltjahr ist
// solange das aktuelle jahr kein schaltjahr ist, die variable um 1 erhoehen und nochmal pruefen
while (!istSchaltjahr(zuPruefendesJahr)) {
zuPruefendesJahr = zuPruefendesJahr + 1;
}
return zuPruefendesJahr;
}
Könntest Du bei istSchaltjahr nicht direkt ...
schreiben?