Programmieranfänge Java - Tagedifferenz zwischen zwei Daten

Hi :)
Ich bin absolute Anfängerin in Sachen Programmieren und versuche mir da grad ein wenig anzueignen.
Verzeiht also bitte, dass mein Lösungsansatz nicht ganz so elegant ist...geht mir erstmal darum, zu sehen, dass ich überhaupt was verstehe.
Ich habe versucht ein Programm zu entwerfen, bei dem ich zwei Daten eingebe und mir die Differenz in Tagen ausgegeben wird.
Schaltjahre habe ich mit eingerechnet....damit ich keine Ausnahmen habe (Jahr durch 100 teilbar) bin ich von einer Zeitspanne von 1901 bis 2099 ausgegangen, denn 2000 ist auch durch 400 teilbar, was die Ausnahme, dass es kein Schaltjahr ist, dann wieder aufhebt.
Mein Programm sieht wie folgt aus..ich hoffe, die Kommentare genügen zur Erklärung...kompilieren will einfach nicht funktionieren.
Häufigste Fehlermeldung ist "class, interface or enum expected".
Danke schon mal im voraus :)

Code:
public class Tage {
    public static void main(String[] args) {

    
int a = Integer.parseInt(args[0]);     //Starttag
int b = Integer.parseInt(args[1]);     //Startmonat
int c = Integer.parseInt(args[2]);  //Startjahr
int d = Integer.parseInt(args[3]);     //Endtag
int e = Integer.parseInt(args[4]);     //Endmonat
int f = Integer.parseInt(args[5]);     //Endjahr
int g = - a                      ;     //Tage  --> Starttage werden abgezogen, weil sonst doppelt berechnet mit Addition der Monatstage
int h = c + 1                     ;  //aktuelles Jahr (für Zwischenjahrberechnung)


 
if (b == 1) {                       // Rest des Anfangjahres berechnen, dazu <=, um 'von oben' zu zählen
g = g + 31;                            
}
if (b <= 2) {          
g = g + 28;
        if (c % 4 == 0) {
        g = g + 1;    
        }
}
if (b <= 3) {
g = g + 31;
}
if (b <= 4) {
g = g + 30;
}
if (b <= 5) {
g = g + 31;
}
if (b <= 6) {
g = g + 30;
}
if (b <= 7) {
g = g + 31;
}
if (b <= 8) {
g = g + 31;
}
if (b <= 9) {
g = g + 31;
}
if (b <= 10) {
g = g + 30;
}
if (b <= 11) {
g = g + 30;
}
if (b <= 12) {
g = g + 31;
}

                                            
for (h < f) {            //1Jahr nach Startjahr (, da Tage schon abgearbeitet mit Restberechnung) beginnend, Tage für zwischenliegende Jahre berechnen        
h = h + 1;
g = g + 365;
    if (h % 4 == 0) {
    g = g + 1;
    }    
}


if (e > 1) {        //Tage für Anfang des Endjahres zählen, dazu > für Endmonate (beachte: zb > 3 bedeutet, auch > 1 und > 2 erfüllt --> zählt für alle Monate hoch
g = g + 31;
}
if (e > 2) {
g = g + 28;
    if (f % 4 == 0)    {
    g = g + 1;
    }
}
if (e > 3) {
g = g + 31;
}
if (e > 4) {
g = g + 30;
}
if (e > 5) {
g = g + 31;
}
if (e > 6) {
g = g + 30;
}
if (e > 7) { 
g = g + 31;
}
if (e > 8) {
g = g + 31;
}
if (e > 9) {
g = g + 30;
}
if (e > 10) {
g = g + 31;
}
if (e > 11) {
g = g + 30;
}

g = g + d;        //Tage des letzten Monats aufrechnen (deshalb nicht >=, damit der letzte Monat nicht voll berechnet wird)


if (f >= c) {
System.out.println("Geben Sie das erste  Datum ein:\t" + " "
+ (int)a + " " + (int)b + " " + (int)c + " ");    
System.out.println("Geben Sie das zweite Datum ein:\t" + " "
+ (int)d + " " + (int)e + " " + (int)f + " ");
System.out.println("Tage: " + " " + (int)g);
}

else { 
System.out.println("Das zweite Datum liegt vor dem ersten");
}


    }
}
 
Zuletzt bearbeitet von einem Moderator:
Aus Fehlern lernt man, deswegen versuche den Kompilierungsfehler erstmal selbst anhand der folgenden Fragen zu finden:

1. In welcher Zeile befindet sich denn der Fehler?
2. Was besagt die Fehlermeldung?
3. Ist die Syntax des Statements korrekt?

Zugegeben, die Antwort auf Frage 2 ist in diesem Fall ohne Hintergrundwissen kaum zu verstehen, aber damit muss man als ProgrammiererIn umgehen lernen. Wenn du nicht gleich eine Antwort findest, dann gehe einfach weiter zu Frage 3.

Wenn du dann den Fehler nicht findest, schaue dir folgenden Abschnitt bei Wikipedia genauer an.

http://de.wikipedia.org/wiki/Java-Syntax#Schleifen

edit:
Für die Fehlersuche gerade in größeren Programmen ist es auch sehr wichtig, dass du dir einen Einrückungsstil angewöhnst oder Programme nutzt, um deinen Code entsprechend zu formatieren. Unter Eclipse geht dies beispielsweise mit Strg+Shif+f. Das erleichtert die Lesbarkeit des Codes und damit die Fehlersuche in komplexem Code.
Zur besseren Les- und Wartbarkeit gehört auch, dass du Variablennamen korrekt benennst, ihnen also durch ihren Namen schon eine Bedeutung zuweist. Die Variable 'a' könntest du z.B. in startTag umbenennen, 'b' startMonat, usw.. bis hin zu 'f' zu endJahr.

edit 2:
Dein Programm rechnet bislang noch falsch:
Geben Sie das erste Datum ein: 1 1 2000
Geben Sie das zweite Datum ein: 1 2 2000
Tage: 397
Gerade bei Java muss man das Rad nicht immer neu erfinden, sondern kann bereits auf viele vorhandenen Klassen zurückgreifen, beispielsweise Date, die eine ähnliche oder gleiche Funktionalität bieten. Zur Übung kannst du aber natürlich erstmal dein Programm korrekt fertig implementieren ;)
 
Zuletzt bearbeitet:
Zurück
Oben