einfaches Java Programm Fehlermeldungen

-simonho-

Cadet 4th Year
Registriert
Juli 2012
Beiträge
119
Hallo,

ich muss für die Schule ein kleines Java-Programm programmieren. Leider komme ich mit Java allerdings noch nicht so gut klar, sodass in meinem kleinen Programm einige Fehler drin sind.

Das Programm soll das aktuelle Alter in Jahren in das Alter in Tagen umrechnnen (ohne Schaltjahre).
Hier ist mein Ansatz:

Code:
import java.util.*;
public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  System.out.println("Wie heißt du?");
  String name = sc.next();
  System.out.println("Guten Tag " + name"!");
  System.out.println("Dein Alter in Jahren:");
  int AlterInJahren = sc.next();
  System.out.println("Welcher Tag des Monats ist heute?");
  int aTag = sc.next();
  System.out.println("Welche Zahl hat der aktuelle Monat?");
  int aMonat = sc.next();  
  System.out.println("An welchem Tag des Monats hast du Geburtstag?");
  int gTag = sc.next();
  System.out.println("Welche Zahl hat dein Geburtsmonat?");
  int gMonat = sc.next();
  System.out.println("Du bist genau " + AlterInJahren*365+(aTag*aMonat*30-gTag*gMonat*30) " Tage alt (ohne Schaltjahre)!" );
}

und hier die dazugehörigen Fehler:

Code:
AlterInTagen.java:2:15: error: class, interface, or enum expected
public static void main(String[] args) {
              ^
AlterInTagen.java:4:3: error: class, interface, or enum expected
  System.out.println("Wie heißt du?");
  ^
AlterInTagen.java:5:3: error: class, interface, or enum expected
  String name = sc.next();
  ^
AlterInTagen.java:6:3: error: class, interface, or enum expected
  System.out.println("Guten Tag " + name"!");
  ^
AlterInTagen.java:7:3: error: class, interface, or enum expected
  System.out.println("Dein Alter in Jahren:");
  ^
AlterInTagen.java:8:3: error: class, interface, or enum expected
  int AlterInJahren = sc.next();
  ^
AlterInTagen.java:9:3: error: class, interface, or enum expected
  System.out.println("Welcher Tag des Monats ist heute?");
  ^
AlterInTagen.java:10:3: error: class, interface, or enum expected
  int aTag = sc.next();
  ^
AlterInTagen.java:11:3: error: class, interface, or enum expected
  System.out.println("Welche Zahl hat der aktuelle Monat?");
  ^
AlterInTagen.java:12:3: error: class, interface, or enum expected
  int aMonat = sc.next();  
  ^
AlterInTagen.java:13:3: error: class, interface, or enum expected
  System.out.println("An welchem Tag des Monats hast du Geburtstag?");
  ^
AlterInTagen.java:14:3: error: class, interface, or enum expected
  int gTag = sc.next();
  ^
AlterInTagen.java:15:3: error: class, interface, or enum expected
  System.out.println("Welche Zahl hat dein Geburtsmonat?");
  ^
AlterInTagen.java:16:3: error: class, interface, or enum expected
  int gMonat = sc.next();
  ^
AlterInTagen.java:17:3: error: class, interface, or enum expected
  System.out.println("Du bist genau " + AlterInJahren*365+(aTag*aMonat*30-gTag*gMonat*30) " Tage alt (ohne Schaltjahre)!" );
  ^
AlterInTagen.java:18:1: error: class, interface, or enum expected
}
^
16 errors

Ich hoffe es ist jemand so hilfsbereit mir ein bischen bei der Lösung der Problems behilflich zu sein.


Vielen Dank,
-simonho-
 
Erstmal fehlt dir nach 'name' ein + zum Anhängen des '!' und dann liefert sc.next() Strings, keine ints wie von dir erwartet. Da musst du also umwandeln (am einfachsten mit Integer.valueOf(sc.next()). Kracht natürlich, wenn falsche Eingaben kommen.
In der letzten Zeile nach deiner Rechnung fehlt dann auch nochmal ein + zum Verbinden der String-Teile.
 
Zuallerst fehlt eine Klasse! Die Fehlermeldung ist doch eigentlich sehr gut verständlich!? :D
 
Erstmal danke für die Antworten. Ich hab das jetzt versucht umzusetzen (ich war mir da nicht so sicher, aber ich hab erstmal gemacht wie ich denke). Jetzt habe ich noch zwei Fehler.

Code:
import java.util.*;
public class konsole1{
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("Wie heißt du?");
    String name = sc.next();
    System.out.println("Guten Tag " + name + "!");
    System.out.println("Dein Alter in Jahren:");
    String AlterInJahren = Integer.valueOf(sc.next());
    System.out.println("Welcher Tag des Monats ist heute?");
    String aTag = Integer.valueOf(sc.next());
    System.out.println("Welche Zahl hat der aktuelle Monat?");
    String aMonat = Integer.valueOf(sc.next());  
    System.out.println("An welchem Tag des Monats hast du Geburtstag?");
    String gTag = Integer.valueOf(sc.next());
    System.out.println("Welche Zahl hat dein Geburtsmonat?");
    String gMonat = Integer.valueOf(sc.next());
    System.out.println("Du bist genau " + AlterInJahren*365+(aTag*aMonat*30-gTag*gMonat*30) " Tage alt (ohne Schaltjahre)!" );
  }
}

Code:
konsole1.java:18:92: error: ')' expected
    System.out.println("Du bist genau " + AlterInJahren*365+(aTag*aMonat*30-gTag*gMonat*30) " Tage alt (ohne Schaltjahre)!" );
                                                                                           ^
konsole1.java:18:125: error: illegal start of expression
    System.out.println("Du bist genau " + AlterInJahren*365+(aTag*aMonat*30-gTag*gMonat*30) " Tage alt (ohne Schaltjahre)!" );
                                                                                                                            ^
2 errors

Anscheinend stimmt irgendetwas mit den Klammern nicht, allerdings weiß ich nicht was ich da noch ändern sollte.
 
Installiere dir mal Eclipse oder NetBeans und kopiere deine Klassen da rein. Da wird dir auch explizit angezeigt, wo deine Fehler stecken. Außerdem, wie Tumbleweed schon angemerkt hat, baue einen try und einen catch-Block ein, damit Falscheingabe in einer Exception gefangen werden.

In Zeile 18 fehlt jedenfalls noch ein "+" vor dem " Tage alt..."
 
Eisbrecher99 schrieb:
In Zeile 18 fehlt jedenfalls noch ein "+" vor dem " Tage alt..."

Danke.

Jetzt funktioniert es. Der Fehler war, dass ich statt int immer String geschrieben hatte.

Edit: Leider kommt ein falsches Ergebnis raus. Nämlich ca. 54 Mio. Tage.
 
Zuletzt bearbeitet:
Das mit der Klasse ist gut. Die habe ich intuitiv beim Pasten in Eclipse selbst erstellt und mir gedacht, das hat er bloß weggelassen, aber da er ja sogar den import gepostet hat, hätte ich mir das denken können (oder tatsächlich mal die Fehlermeldung lesen können :D ).
 
So, ich hab jetzt zwar keine Fehlermeldung mehr, aber die Rechnung stimmt nicht.

Code:
import java.util.*;
public class konsole1{
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("Wie heißt du?");
    String name = sc.next();
    System.out.println("Guten Tag " + name + "!");
    System.out.println("Dein Alter in Jahren:");
    int AlterInJahren = Integer.valueOf(sc.next());
    System.out.println("Welcher Tag des Monats ist heute?");
    int aTag = Integer.valueOf(sc.next());
    System.out.println("Welche Zahl hat der aktuelle Monat?");
    int aMonat = Integer.valueOf(sc.next());  
    System.out.println("An welchem Tag des Monats hast du Geburtstag?");
    int gTag = Integer.valueOf(sc.next());
    System.out.println("Welche Zahl hat dein Geburtsmonat?");
    int gMonat = Integer.valueOf(sc.next());
    System.out.println("Du bist genau " + (AlterInJahren*365+(aTag*aMonat*30-gTag*gMonat*30)) + " Tage alt (ohne Schaltjahre)!" );
  }
}

Ergebnis bei ca. 15 Jahren: ca. 8000 Tage.
Ergebnis sollte sein: ca. 5500 Tage.

Bin jetzt etwas ratlos.

Edit: Der Fehler scheint an der Rechnung zu liegen. Wenn ich es mit dem Taschenrechner ausrechne kommt dasselbe raus.
 
Zuletzt bearbeitet:
Code:
aTag*aMonat*30
Was genau macht das?
 
Darlis schrieb:
Code:
aTag*aMonat*30
Was genau macht das?

Aktueller Tag * Aktueller Monat * 30 (für die Tage des Monats)

Edit: hier scheint das Problem zu liegen.

Edit2: sollte aTag+aMonat*30 sein. Jetzt funktionierts endlich, danke an alle.
 
Zuletzt bearbeitet:
Naja, was du machst, ist ziemlich kompliziert und an vielen Punkten fehleranfällig.

Code:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws ParseException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Wie heißt du?");
        String name = scanner.next();
        System.out.println("Hallo " + name);
        System.out.println("Wann hast du Geburtstag?");
        String date = scanner.next();

        // hier wird das Geburtsdatum verarbeitet
        DateFormat formatter = new SimpleDateFormat("dd.MM.yyyy");
        Date birthdate = formatter.parse(date);
        
        // Millisekunden seit 01.01.1970 bis aktuelles Datum
        long currentTime = System.currentTimeMillis();
        // Millisekunden seit 01.01.1970 bis / seit Geburtstagsdatum
        long timeSinceBirthday = birthdate.getTime();
        // Unterschied in Millisekunden
        long difference = currentTime - timeSinceBirthday;

        // Umrechnen in Tage und Ausgabe
        System.out.println("Tage seit deinem Geburtstag: " + difference / (1000 * 60 * 60 * 24));
    }
}
 
Zurück
Oben