u23
This commit is contained in:
parent
13ec245d10
commit
b06ede766f
Binary file not shown.
|
@ -0,0 +1,136 @@
|
||||||
|
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";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue