Java: Ich komme nicht weiter?

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.

Bananapeel321  28.12.2021, 16:12

Könntest Du bei istSchaltjahr nicht direkt ...

return jahr%4==0 && (jahr%100!=0 || jahr%400==0);

schreiben?

0

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;
}