String überprüfen, ob gültig, sonst wiederholung der eingabe

Chrissicat

Mitglied
Java:
 String datumString = "";

            System.out.println("Dieses Programm überprüft ein eingegebenes Datum im Zeitraum von 15.10.1582 - 05.12.2010");

            datumString = IOTools.readString("Geben Sie das zu überprüfende Datum im Format tt.mm.jjjj ein: ");
            //das Programm liest den String ein.
            char[] datum = datumString.toCharArray();
            for (int i = 0; i < datum.length; i++) {
            }
            while (datum[2] != '.' || datum[5] != '.') {                                                                              
                System.out.println("kein Datum eingegeben!");
                return;
            }
            while (datum.length != 10) {
                System.out.println("Fehler, kein Datumsformat.");
                return;
            }


ich bin blutige Anfängerin und bräuchte Ihre/eure hilfe!
das programm soll einen string einlesen, der auf gültigkeit überprüft wird.
leider darf ich bei meinem Programm nicht von einem "intelligenten Benutzer" ausgehen, deswegen soll der benutzer, sobald er ein datum nicht genau in diesem tt.mm.jjjj format eingibt, seine eingabe wiederholen können.
ich bring's nicht zusammen!
mein programm läuft, wenn der benutzer tt.mm.jjjj eingibt. aber das programm soll auch bei der eingabe von zB "slljsdf" nicht abstürzen.. wie sag ich das meinem programm? 😉
ich habs jetzt nur mal so ungefähr (wie unschwer zu erkennen ist 😀)
vielen dank schon mal im vorraus!
 
Schreibe dir doch einfach eine Methode die den String prüft und entweder true oder false zurückgibt, dann kannst du in einer do-while-Schleife immer die Methode mit der Eingabe aufrufen, bis die Eingabe eben korrekt ist.
ala
Java:
		String date = null;
		do {
			date = //read input
		} while (!legalDate(date));

Mit Regex könntest du das übrigens viel einfacher überprüfen 🙂
 
also wenn die aufgabe darin besteht, den string zu parsen und ohne regex zu arbeiten, dann nimm die metode von eRaaaa und prüfe bitte auch, ob die eingegebenen chars auch integer sind.

//edit: im moment würde auch eine eingabe wie : fg.23.t5gh als datum durchgehen.

Gruss Vanny
 
das ist das 2. problem, das sich daraus ergibt: wie schaut die methode aus? hab noch nie eine methode gemacht
Java:
public static void checkDatum (args[] String) //oder wie nenn ich die methode besser?
 char[] datum = datumString.toCharArray();              
            if (datum.length != 10) {                              
                System.out.println("Fehler, kein Datumsformat.");

wie schaut das mit true und false aus? wie schreib ich das?
 
Hallo,

Java:
public static void checkDatum (args[] String) //oder wie nenn ich die methode besser?

Warum (args[] String) als übergebene Parameter? Eine Methode sollte auch eine Methode sein, und keine Main-Method zugleich.

Du wirst es in der Zukunft einfacher haben, wenn du dich gleich mit der "Objektwelt" anfreundest.

Du machst erstmal zwei klassen. Eine mit der Main-Methode (public static void main(String[] args)) und eine mit deinen "Funktionen".

Dann machst du einen Objektaufruf deiner "Funktionenklasse" in der "Mainklasse". Hört sich schwer an, ist es aber nicht und zwingt dich von anfang an zum strukturiertem Programmieren.

Wie sieht sowas aus ? Nun, hier mal ein Beispiel ohne dir die "Hausaufgaben" zu machen 😉

Wenn du Fragen dazu hast, frag einfach. Du kannst das Beispiel hier auch bei dir Laufen lassen. Dazu musst du allerdings oben den Packagenamen ändern oder einfach weglöschen.



Die Main Klasse:
Java:
package de.Hilfe_Fuer_Foren;

import java.io.IOException;

public class Beispiel_Main {
public static void main(String[] args) {
	
	Add addiere = new Add(); //Das ist der Objectaufruf der Klasse Add
	//Das daraus entstandene Objekt nennt sich dann addiere
	//Wie eine benannte Variable, nur das es die Klasse Add bereitstellt
	//aber auch nur die dienge, die als public deklariert sind
	//mit privat deklarierte Funktionen und Variablen wäre nicht sichtbar
	
	try {
		
		addiere.addTwoNumbers();//hier wird die Methode/Funktion addTwo Numbers
		//Aufgerufen. Sie stammt aus der Klasse Add
		
	} catch (IOException e) {
		
		e.printStackTrace();
	}
}
}

Die Klasse Add mit einer Methode

Java:
package de.Hilfe_Fuer_Foren;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Add {

	public int addTwoNumbers() throws IOException {
		
		System.out.println("Dieses Programm Addiert zwei Zahlen");
		int a;
		int b;
		int amount = 0;
		String tempString;

		BufferedReader bin = new BufferedReader(
				new InputStreamReader(System.in));

		System.out.println("Bitte die erste Zahl eingeben: ");
		tempString = bin.readLine();
		a = Integer.parseInt(tempString);
		System.out.println("Bitte die zweite Zahl eingeben: ");
		tempString = bin.readLine();
		b = Integer.parseInt(tempString);
		
		System.out.println("das ergebnis ist:" +(a+b));

		return amount;
	}

}
 
Java:
    public void checkDatum(String x) {
        char[] y = x.toCharArray();
        if (y.length != 9) {
            System.out.println("Fehler, kein Datumsformat!");
        }
        if (Character.isDigit(y[0])) {
        }
        if (Character.isDigit(y[1])) {
        }
        if (Character.isDigit(y[3])) {
        }
        if (Character.isDigit(y[4])) {
        }
        if (Character.isDigit(y[6])) {
        }
        if (Character.isDigit(y[7])) {
        }
        if (Character.isDigit(y[8])) {
        }
        if (Character.isDigit(y[9])) {
        }
        if (y[2] != '.' || y[5] != '.') {                                                                               //die Trennzeichen müssen vorhanden sein.
            System.out.println("kein Datum eingegeben!");
        }
        return;

so, aber das funktioniert natürlich nicht, so wie ich will.. bitte sagt mir, was fehlt? bzw wie viel 😉
eig funktionierts gar nicht.. ich hab das problem zwar beim methoden schreiben allgemein, aber DIESE methode klappt nicht.. ich brauch hilfe bei genau dieser methode... 😳
 
Deine Methode müsste in dem Fall natürlich auch etwas zurückgeben -> boolean, sonst kannst du es ja nicht so wie vorgeschlagen in der Schleife nutzen! Ausserdem hast du ein Problem wenn der User ein falsches Format eingibt und anstelle von 4 Jahreszahlen nur 2 eingibt --> Exception!
Was ich mich schon die ganze Zeit frage ist: sollst du wirklich nur kontrollieren ob das Format stimmt?
Also Zahl Zahl Punkt Zahl Zahl Punkt Zahl Zahl Zahl Zahl ?
Dann könnte das in einer Zeile mit so etwas wie
Java:
	public static boolean isLegalDate(String date){
		return date.matches("\\d{2}\\.\\d{2}\\.\\d{4}");
	}
gelöst werden, aber das ist ja noch lange kein gültiges Datum! Kann da ja Zahlen wie ich lustig bin übergeben! Ist das egal?
 
Wie wäre es mit SimpleDateFormat#parse? Wenns nicht gültig ist einfach Exception abfangen, wird das einfachste und leserlichste sein imo.
 
naja.. mal schauen, ob ich das noch schaffe..
mein programm rennt ja, wenn ich zahlen eingebe (egal welche, das programm muss ja entscheiden, ob es gillt), nur bei buchstaben hängt's sich auf.. soll halt wenn möglich "idiotensicher" geschrieben sein..
 

Zurück
Oben