Plausibles Datum

astradslme

Mitglied
Hallo Leute,
ich soll ein Datum auf plausibilität prüfen.

Sprich ist das eingegebene Datum richtig,verfügbar,macht es einen Sinn.

Darauf muss geachtet werden:

Ob die Monate 31 oder 30 Tage haben.
Ob der Februar 29 Tage oder 28 Tage hat.

hier ist mein angefangener Code allerdings komm ich mit dem Verknüpfen etc. nicht voran, ich denke die Bedingungen Stimmen soweit nur das "verknüpfen" miteinander klappt nicht :-( . Bitte versuch mir so einfach wie möglich zu helfen, da es mit einfachen If Selektionen umgesetzt werden muss.

Vielen Dank schonmal!

Java:
package CodeAblage;
import java.io.*;
public class Plausibel {

	
	public static void main(String[] args) throws IOException {
		
		int jahr = 0, monat = 0, tag = 0, maxTage = 0;
		
		BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
		
		System.out.println("Bitte geben Sie Jahr das ein!");
		
                jahr = Integer.parseInt(br.readLine());
		if (jahr>=0 && jahr<=9999)
		{
				System.out.println("Das Jahr ist OK.");
		}
		
		System.out.println("Bitte geben Sie den Monat ein!");
		monat = Integer.parseInt(br.readLine());
		if (monat >=1 && monat <=12)
		{
				System.out.println("Der Monat ist OK.");
		}
		
		
		
		System.out.println("Bitte geben Sie den Tag ein!");
		tag = Integer.parseInt(br.readLine());
		
		if (tag>=1 && tag<=maxTage)
		{
			System.out.println("Der Tag ist OK.");
		}
		
		
		if (monat == 1 && monat == 5 && monat == 7 && monat == 8 && monat == 10 && monat == 12)
		{
			maxTage=31;
		}
			
			else 
			{
				if (monat == 4 && monat == 6 && monat == 9 && monat == 11)
					maxTage=30;
			}
				
		
				
		
	
		
			
		
				
		//Wohin damit?
		
		if (monat == 1 && monat == 5 && monat == 7 && monat == 8 && monat == 10 && monat == 12)
			maxTage=31;
		
		if (monat == 4 && monat == 6 && monat == 9 && monat == 11)
			maxTage=30;
		
		if (monat == 2 && ((jahr%4) == 0) && (!((jahr%100) == 0) || jahr%400 == 0))
			maxTage=29;
		
		if (monat == 2 && !((jahr%4) == 0) && (!((jahr%100) == 0) || jahr%400 == 0))
			maxTage=28;
			
									
		}
					
	}
 
Und du solltest die Tage erst einlesen wenn du die Monatsbestimmung mit den maxtagen gemacht hast. Denn immoment muss die Tageszahl größer 1 und kleiner maxtage sein, was in dem Moment noch 0 ist
 
Ein int kann nicht gleichzeitig zwei Werte haben (|| verwenden)

Berechnung von maxTage nach der Eingabe von tag und vor der Prüfung

Java:
if (.. || .. || ..) {

} else if (.. || .. || ..) {

.. } else {

}
verwenden

PS: Wann ist ein Schaltjahr ein Schaltjahr??? 🙂
 
Hi Leute ich habe das ganze nun hinbekommen nur eine FRAGE:

Wenn alle "if" Bedingunen true sind, also nicht ins "else" welchseln möchte ich eine Ausgabe haben, das DATUM IST OK, sobald eine false ist soll ausgegeben werden das DAS DATUM IST NICHT OK!

Danke schonmal ihr habt schon sehr geholfen!!

Hier mein CODE:

Java:
package zelle;
import  java.io.*;

public class Prüfe {
	
	int jahr = 0, monat = 0, tag = 0, maxTage = 0;
	
	public void werteEinlesen  () throws IOException
		
	{
		BufferedReader EINGABE = new BufferedReader(new InputStreamReader (System.in));
		
		System.out.println("Bitte geben Sie das Jahr ein:");
		jahr = Integer.parseInt(EINGABE.readLine());
		
		System.out.println("Bitte geben Sie den Monat ein:");
		monat = Integer.parseInt(EINGABE.readLine());
		
		System.out.println("Bitte geben Sie den Tag ein:");
		tag = Integer.parseInt(EINGABE.readLine());
		
		
	}

	public void werteVerarbeitenPrüfen (){
		
		
		
		
		if (jahr >=1 && jahr<=9999)
			{
			System.out.println("Das Jahr ist OK!");
			}
				else 
					{
					System.out.println("Das Jahr ist NICHT OK!");
					}
		
		if (monat>=1 && monat<=12)
			{
			System.out.println("Der Monat ist OK!");
			}
				else
					{
					System.out.println("Der Monat ist NICHT OK!");
					}
		if (monat == 1 || monat ==3 || monat == 5 || monat == 7 || monat == 8 || monat == 10 || monat == 12)
			{
			maxTage=31;			
			}
		if (monat == 4 || monat == 6 || monat == 9 || monat == 11)
			{
			maxTage=30;
			}
		//HIER WIRDS KOMISCH
		
		if (monat == 2 && (jahr%4==0 && (jahr%100!=0 || jahr%400==0)))
				{
			maxTage = 29;	
			System.out.println("Das Jahr ist ein Schaltjahr!");
				}
				
				
		if (monat == 2 && !(jahr%4==0 && (jahr%100!=0 || jahr%400==0)))
				{
				maxTage = 28;
				System.out.println("Wir haben kein Schaltjahr");
				}
				
		
		if (tag>=1 && tag<=maxTage)
			{
			System.out.println("Der Tag ist OK!");
			}
				else
					{
					System.out.println("Der Tag ist NICHT OK!");
					}
 
Java:
public void werteVerarbeitenPrüfen (){

private boolean plausibel = true;

// Datumprüfung wenn irgendetwas nicht ok --> plausibel = false

if(plausibel){
// OK
} else {
// nicht ok
}
}
Dabei nimmst du Standartmäßig an, dasss du ein plausibles Datum hast und erst wenn eine Prüfung fehl schlägt, weißt du dass es nicht stimmt.

Zusätzlich solltest du deine Prüfungen noch verschachteln. wie z.B.:

Java:
//prüfe Tag
//wenn Tag ok dann prüfte Monat
// sonst ENDE

Das Sternchen bei einer solchen Funktion wäre natürlich, wenn sie halbwegs erkennen würde, wenn die richtigen Daten in einer anderen Form angegeben werden (dd/mm/yyyy = mm/dd/yyy)
 
Zuletzt bearbeitet:
Java:
        if (monat == 1 || monat ==3 || monat == 5 || monat == 7 || monat == 8 || monat == 10 || monat == 12)
            {
            maxTage=31;         
            }
        if (monat == 4 || monat == 6 || monat == 9 || monat == 11)
            {
            maxTage=30;
            }
        //HIER WIRDS KOMISCH
        
        if (monat == 2 && (jahr%4==0 && (jahr%100!=0 || jahr%400==0)))
                {
            maxTage = 29;   
            System.out.println("Das Jahr ist ein Schaltjahr!");
                }
                
                
        if (monat == 2 && !(jahr%4==0 && (jahr%100!=0 || jahr%400==0)))
                {
                maxTage = 28;
                System.out.println("Wir haben kein Schaltjahr");
                }

->

Java:
        if (monat == 1 || monat ==3 || monat == 5 || monat == 7 || monat == 8 || monat == 10 || monat == 12)
            {
            maxTage=31;         
            }
        else if (monat == 4 || monat == 6 || monat == 9 || monat == 11)
            {
            maxTage=30;
            }
        //HIER WIRDS KOMISCH
        
        else if ( ahr%4==0 && (jahr%100!=0 || jahr%400==0) )
                {
            maxTage = 29;   
            System.out.println("Das Jahr ist ein Schaltjahr!");
                }
                
                
        else
                {
                maxTage = 28;
                System.out.println("Wir haben kein Schaltjahr");
                }

Sobald einmal false, musst du eine Variable (ein Flag) auch auf flase setzen
 
ich habs mit 3 verschiedenen strings gelöst,

also:

Java:
if (stringI == "OK" && stringII == "OK" && stringIII == "OK")
System.out.println("Das Datum ist plausibel");

else System.out.println("Das Datum ist nicht plausibel");

.
.
.

Und halt StringI, StringII, StringIII oben zum jeweiligen if hinzugefügt

hab ich das nun falsch oder unprofessionell gelöst? weil es funktioniert! :-D
 
zumindest falsch, da man Strings mit [c]equals(String anotherString)[/c] vergleicht...über Professionalität will ich lieber nicht urteilen 😉
 
Aktueller Code, welcher funktioniert:

Java:
package zelle;
import  java.io.*;

public class Prüfe {
	
	int jahr = 0, monat = 0, tag = 0, maxTage = 0;
	String prüfeJahr, prüfeMonat, prüfeTag;
	
	
	public void werteEinlesen  () throws IOException
		
	{
		BufferedReader EINGABE = new BufferedReader(new InputStreamReader (System.in));
		
		System.out.println("STARTE Überprüfung des Datums\n");
		
		System.out.println("Bitte geben Sie das Jahr ein:");
		jahr = Integer.parseInt(EINGABE.readLine());
		
		System.out.println("Bitte geben Sie den Monat ein:");
		monat = Integer.parseInt(EINGABE.readLine());
		
		System.out.println("Bitte geben Sie den Tag ein:");
		tag = Integer.parseInt(EINGABE.readLine());
		
		
	}

	public void werteVerarbeitenPrüfen (){
		
		boolean plausibel = true;
		
		if (plausibel)
		{
			
		
		
		
		if (jahr >=1 && jahr<=9999)
			{
			System.out.println("Das Jahr ist OK!");
			prüfeJahr = "peniz";
			}
				else 
					{
					System.out.println("Das Jahr ist NICHT OK!");
					}
		
		if (monat>=1 && monat<=12)
			{
			System.out.println("Der Monat ist OK!");
			prüfeMonat = "peniz";
			}
				else
					{
					System.out.println("Der Monat ist NICHT OK!");
					}
		if (monat == 1 || monat ==3 || monat == 5 || monat == 7 || monat == 8 || monat == 10 || monat == 12)
			{
			maxTage=31;			
			}
		if (monat == 4 || monat == 6 || monat == 9 || monat == 11)
			{
			maxTage=30;
			}
		//HIER WIRDS KOMISCH
		
		if (monat == 2 && (jahr%4==0 && (jahr%100!=0 || jahr%400==0)))
				{
			maxTage = 29;	
			System.out.println("Das Jahr ist ein Schaltjahr!");
				}
				
				
		if (monat == 2 && !(jahr%4==0 && (jahr%100!=0 || jahr%400==0)))
				{
				maxTage = 28;
				System.out.println("Wir haben kein Schaltjahr");
				}
				
		
		if (tag>=1 && tag<=maxTage)
			{
			System.out.println("Der Tag ist OK!");
			prüfeTag = "peniz";
			}
				else
					{
					System.out.println("Der Tag ist NICHT OK!");
					}
		
		}
		else
		{
			System.out.println("Das Datum ist NICHT plausibel");
		}
	}
	
	
	
	
	
	
	
	public void plausibelAusgabe ()
	
	{
		//if (prüfeJahr.equals("peniz") & prüfeMonat.equals("peniz") & prüfeTag.equals("peniz") )
			
		if (prüfeJahr=="peniz" && prüfeMonat=="peniz" && prüfeTag=="peniz")
			{
			System.out.println ("\n" + "Das Datum ist plausibel!");
			}
				else
					{
					System.out.println("\n" + "Das Datum ist NICHT plausibel!");
					}
		
	}
	
	
	
	
	}

PS: Bei der Überprüfung if (prüfeJahr.equals("peniz") & prüfeMonat.equals("peniz") & prüfeTag.equals("peniz") )

kommt im falle eines falls eine fehlermeldung, wenn alle gleich sind funktioniert die ausgabe, hmmm
 
Vervollständige bitte folgenden Satz: Ein Schaltjahr ist immer dann, ...

Und mit einer boolean-Variable wäre das einfacher. Entweder du nimmst an, dass es richtig ist und setzt es dann andernfalls auf falsch - oder umgekehrt
 

Zurück
Oben