# Datum Prüfer



## Salzstange (24. Jan 2012)

Hallo,
wie der Titel vielleicht schon Verrät, soll ich in JAVA ein Programm schreiben, bei dem man sein Geburtsadtum eingibt, dieses überprüft wird und damit nach Eingabe des aktuellen Datums das Alter berechnet wird.

Code 1:
Bei diesem Code funktioniert das Programm bei richtiger Eingabe einwandfrei.
Nur bei falscher Eingabe NACH dem ersten Buchstaben (index>0) gibt es eine Exception.
Ich denke das es etwas mit der FOR-Schleife zu tun hat, da ja keine Strings einem INTEGER zugewiesen werden können.
Hier nur die Prüfung des richting Syntax und Zuweisung zum neuen Speicher:

```
//Scanner
    Scanner scan = new Scanner(System.in);

    int tag = 0;
    int monat = 0;
    int jahr = 0;
    int tag2 = 0;
    int monat2 = 0;
    int jahr2 = 0;
    int fehlerzahl = 0;
    int fehlerzahl2 = 0;

    //Schleife 1: Prüfung des Geburtsdatums
    do{
      fehlerzahl = 0;
       System.out.println();
       System.out.println("Bitte geben sie ihr Geburtsdatum in folgender");
       System.out.println("Formatierung an: TT.MM.JJJJ");
       String eingabe = scan.next();

      if(eingabe.length()==10){

        for(int i=0;i<10;i++){
           int asc = eingabe.codePointAt(i);

           if((asc<45)||(asc>57)||(asc==47)){
             fehlerzahl++;
           }
           if(fehlerzahl==0){

             tag = Integer.parseInt(eingabe.substring(0,2));
             monat = Integer.parseInt(eingabe.substring(3,5));
             jahr = Integer.parseInt(eingabe.substring(6,10));
           }
           if((tag>31) || (monat>12) || (jahr<1880) || (jahr>2012)){
            fehlerzahl++;
           }

        }
      
      }
      else{
        fehlerzahl++;
      }

    }while(fehlerzahl>0);
```

Code 2:
Ich komm nicht aus der ersten Schleife heraus.


```
//Schleife 1: Prüfung des Geburtsdatums
    do{
       fehlerzahl = 0;
       System.out.println();
       System.out.println("Bitte geben sie ihr Geburtsdatum in folgender");
       System.out.println("Formatierung an: TT.MM.JJJJ");
       String eingabe = scan.next();

      if(eingabe.length()==10){

        for(int i=0;i<10;i++){
           int asc = eingabe.codePointAt(i);

           if((asc<46)||(asc>57)||(asc==47)){
             fehlerzahl++;
           }

           if((tag>31) || (monat>12) || (jahr<1880) || (jahr>2012)){
            fehlerzahl++;
           }

        }
      }
      else{
        fehlerzahl++;
      }
      if(fehlerzahl==0){

         tag = Integer.parseInt(eingabe.substring(0,2));
         monat = Integer.parseInt(eingabe.substring(3,5));
         jahr = Integer.parseInt(eingabe.substring(6,10));

      }
      System.out.println(fehlerzahl);

    }while(fehlerzahl!=0);
```

Wie muss ich es richtig schreiben?


----------



## dayaftereh (24. Jan 2012)

Nutze SimpleDateFormat und Parse das Datum. Wenn eine Exception kommt ist das Datum nicht korrekt!


----------



## SlaterB (24. Jan 2012)

```
if((tag>31) || (monat>12) || (jahr<1880) || (jahr>2012)){
            fehlerzahl++;
           }
```
gehört nicht in die Schleife, die jedes Zeichen einzeln prüft, 
das ist doch höchstens einmal am Ende interessant,

direkt nach die Schleife auch nicht, 
offensichtlich erst wenn die drei Felder auch heraus-gesubstringt wurden

-----

@dayaftereh
sinnvoll bei einer Aufgabe in der man genau das (anscheinend manuell) programmieren soll?..


----------



## Salzstange (24. Jan 2012)

Was ist SimpleDateFormat?


----------



## SlaterB (24. Jan 2012)

Was ist eine Suchmaschine?


----------

