import java.util.Scanner; /** * Klasse zum errechnen der Jahreszeit eines eingegebenen Datums */ public class Jahreszeit { public static final int[] MONATSLAENGEN = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; public static final int[] FRUEHLINGSANFANG = {3, 20}; public static final int[] SOMMERANFANG = {6, 21}; public static final int[] HERBSTANFANG = {9, 22}; public static final int[] WINTERANFANG = {12, 21}; public static void main(String[] args) { Scanner console = new Scanner(System.in); System.out.println(bestimmeJahreszeit(datumEinlesen(console))); } /** * Liest nach ausgabe einer Eingabeaufforderung eine Zahl ein * Bei ungueltiger Eingabe wird so lange wiederholt, bis eine * guelige Eingabe erfolgt */ public static int zahlEinlesen(Scanner console, String prompt) { while (true) { System.out.print(prompt); String eingabe = console.nextLine(); try { return Integer.parseInt(eingabe); } catch (NumberFormatException e) { System.out.println("Bitte eine ganze Zahl eingeben."); } } } /** * Liest mittels zahlEinlesen eine Zahl innerhalb eines durch * min und max definierten bereiches ein * Bei ungueltiger Eingabe wird so lange wiederholt, bis eine * gueltige Eingabe erfolgt. */ public static int zahlInRangeEinlesen(Scanner console, int min, int max, String prompt) { prompt = prompt + " (" + min + "-" + max + "): "; int eingabe = zahlEinlesen(console, prompt); while (eingabe < min || eingabe > max) { System.out.println("Nicht im geforderten Bereich."); eingabe = zahlEinlesen(console, prompt); } return eingabe; } /** * Liest ein beliebeiges Datum durch abfrage von Tag * und Monat von der Konsole ein ohne Ueberpruefung * auf Gueltigkeit des Datums * Rueckgabe des Datums erfolgt durch ein Integer Array * des Formates: {Monat, Tag} */ public static int[] beliebigesDatumEinlesen(Scanner console) { int tag = zahlInRangeEinlesen(console, 1, 31, "Tag"); int monat = zahlInRangeEinlesen(console, 1, 12, "Monat"); int[] datum = {monat, tag}; return datum; } /** * Liest ein Datum durch abfrage von Tag und Monat von der * Konsole ein * Bei eingabe eines ungueltigen datums wird die Abfrage * wiederholt bis ein gueltiges Datum eingegeben wird * Rueckgabe des Datums erfolgt durch ein Integer Array * des Formats: {Monat, Tag} */ public static int[] datumEinlesen(Scanner console) { int[] datum = beliebigesDatumEinlesen(console); while (!istGueltigesDatum(datum[0], datum[1])) { System.out.println("Datum ist ungültig. Wiederholen"); datum = beliebigesDatumEinlesen(console); } return datum; } /** * Ueberprueft ob ein durch monat und tag gegebenes Datum * Im gueltigen Bereich liegt */ public static boolean istGueltigesDatum(int monat, int tag) { if (monat < 1 || monat > 12) return false; if (tag < 1 || tag > MONATSLAENGEN[monat - 1]) return false; return true; } /** * Vergleicht zwei Daten und gibt zurueck ob datum2 groesser oder * gleich datum1 ist * datum1 und datum2 sind Interger Arrays im Format: {Monat, Tag} */ public static boolean datumIstGroesser(int[] datum1, int[] datum2) { if (datum1[0] < datum2[0]) { // ist datum1 Monat < datum2 Monat return true; } else if (datum1[0] > datum2[0]) { // ist datum1 Monat > datum2 Monat return false; } else { // datum1 Monat und datum2 Monat sind gleich if (datum1[1] > datum2[1]) { // ist datum1 Tag > datum2 Tag return false; } return true; } } /** * Bestimmt die Jahreszeit eines Datums * datum ist ein Integer Array im Format: {Monat, Tag} */ public static String bestimmeJahreszeit(int[] datum) { if (datumIstGroesser(WINTERANFANG, datum)) { return "Winter"; } if (datumIstGroesser(HERBSTANFANG, datum)) { return "Herbst"; } if (datumIstGroesser(SOMMERANFANG, datum)) { return "Sommer"; } if (datumIstGroesser(FRUEHLINGSANFANG, datum)) { return "Frühling"; } return "Winter"; } }