Hi, ich bin ganz neu in Java (an der UNi Programmieren Kurs belegt). Ich habe gar keine Erfahrungen im Programmieren und muss jetzt die ersten Programme für die Uni schreiben. Unser Dozent setzt leider sehr viel Wissen vorraus und erklärt schlecht.
Wir sollen einen Code schreiben, welcher 2 Daten einliest und die Differenz in Tagen ausgibt, dabei jedoch keine Funktionen (außer Scanner) importieren.
Mein Code sieht im Moment so aus:
Im Prinzip funktioniert der Code gut, jedoch passiert immer folgendes:
Wenn man als 1. Datum KEIN Schaltjahr eingibt und als 2 Datum ein Schaltjahr, dann rechnet der Code immer mit 1 Tag zu viel. Wo ist mein Denkfehler? Kann mir jemand helfen?
Liebe Grüße
Zooza
Wir sollen einen Code schreiben, welcher 2 Daten einliest und die Differenz in Tagen ausgibt, dabei jedoch keine Funktionen (außer Scanner) importieren.
Mein Code sieht im Moment so aus:
Java:
import java.util.Scanner;
public class Tageberechnen {
public static void main(String[] args) {
int tag1, tag2, monat1, monat2, jahr1, jahr2, i, z, k;
/**
@param tag1, tag2, monat1, monat2, jahr1, jahr2 Speicher für eingegebene Daten.
@param i dient später als Schleifenzähler, und als Index
@param z in z werden die "gezählten" Tage aufsummiert, bzw. abgezogen.
@param k wird benötigt um später mit einem unveränderten jahr2 weiterrechnen zu können,
da k in der while-Schleife verändert wird.
@return es wird die Anzahl der Tage zwischen Datum1 und Datum2 ausgegeben.
**/
int monate[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
int monateschalt[] = {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366};
/**
Es werden zwei weitere Variablen angelegt (integer arrays). Diese dienen später zur Berechnung
der der vergangenen Tage zwischen den Monaten.
**/
Scanner scan = new Scanner(System.in);
System.out.print("Geben Sie das erste Datum ein: ");
tag1 = scan.nextInt(); //tag1 nimmt den Wert der 1. eingegebenen Zahl an
monat1 = scan.nextInt(); //monat1 nimmt den Wert der 2. eingegebenen Zahl an
jahr1 = scan.nextInt(); //jahr1 nimmt den Wert der 3. eingegebenen Zahl an
System.out.print("Geben Sie das zweite Datum ein: ");
tag2 = scan.nextInt(); //tag2 nimmt den Wert der 1. eingegebenen Zahl an
monat2 = scan.nextInt(); //monat2 nimmt den Wert der 2. eingegebenen Zahl an
jahr2 = scan.nextInt(); //jahr2 nimmt den Wert der 3. eingegebenen Zahl an
k = jahr2; //der Wert von jahr2 wird in "k" zwischengespeichert, da wir diesen später noch benötigen
z = 0; //z wird initialisiert
i = jahr2 - jahr1; //i wird als Schleifenzähler benötigt und erhält den Wert der Differenz der Jahre
while (i > 0) {
k = k % 4; //k % 4 überprüft, ob es sich um ein Schaltjahr handelt oder nicht.
if (k !=0) {
z += 365; //falls das betrachtete Jahr kein Schaltjahr ist.
} else {
z += 366; //falls das betrachtete Jahr ein Schaltjahr ist.
}
i -= 1; //Schleifenzähler -1
k -= 1; //das nächste Jahr soll betrachtet werden
}
i = monat2 - 1; //i wird als Index benötigt
if (jahr2 % 4 == 0) {
z += monateschalt[i] + tag2;
/**
liest den Wert aus dem int-array (Schaltjahr) und addiert bereits vergangene Tage des Monats
**/
} else {
z += monate[i] + tag2;
}
/**
liest den Wert aus dem int-array (kein Schaltjahr) und addiert bereits vergangene Tage des Monats
**/
i = monat1 - 1;
if (jahr1 % 4 == 0 && jahr2 % 4 != 0) {
z -= (monateschalt[i] + tag1 - 1);
/**
liest den Wert aus dem int-array (Schaltjahr) und subtrahiert bereits vergangene Tage des Monats,
zieht 1 weiteren Tag pauschal ab, da sonst (1. Jahr Schaltjahr, 2. kein Schaltjahr) in der while Schleife
dieser Fall nicht betrachtet wird.
**/
} else if (jahr1 % 4 == 0 && jahr2 % 4 == 0) {
z -= (monateschalt[i] + tag1);
} else {
z -= (monate[i] + tag1);
}
/**
liest den Wert aus dem int-array (kein Schaltjahr) und subtrahiert bereits vergangene Tage des Monats
**/
System.out.println("Tage: " +z); //gibt das Ergebnis aus.
}
}
Im Prinzip funktioniert der Code gut, jedoch passiert immer folgendes:
Wenn man als 1. Datum KEIN Schaltjahr eingibt und als 2 Datum ein Schaltjahr, dann rechnet der Code immer mit 1 Tag zu viel. Wo ist mein Denkfehler? Kann mir jemand helfen?
Liebe Grüße
Zooza