Wertebereich eingrenzen

laura88

Mitglied
Hallo,

In meinem Java Programm arbeite ich mit mehreren Datumsangaben, z.B. Geburtstagen etc.
Um jetzt ein Datum "richtig" eingeben zu können, muss ich für mein Attribut int day den Wertebereich zwischen 1 und 31 eingrenzen, um nicht als Datum den 40.8.1990 zum Beispiel eingeben zu können.

Mein Vorschlag wäre gewesen:

Java:
public void setDay(int Day) {
this.day = day;
} { if (day<1 || day>31) {
System.out.println("Tag nicht vorhanden"); }

Wenn ich jetzt in meiner Testklasse ein passendes Datum oder ein falsches Datum eingebe, kommt beide Male die Meldung Tag nicht vorhanden.
Kann mir da jemand weiterhelfen? Vielen Dank im Voraus!
 
Java ist case-sensitiv und die Konvention ist, Klassen mit einem Grossbuchstaben, Variablen mit einem Kleinbuchstaben zu beginnen.
Daher
Java:
setDay(int Day)
änder in
Java:
setDay(int day)
 
Gute Idee!
Aber damit hat sich nur das Problem gelöst, dass ich bei einem "richtigen" Datum kein "der Tag ist nicht vorhanden" herausbekomme. Aber jetzt bekomme ich Die Meldung auch nicht mehr wenn ich ein falsches Datum eingebe.
Sehr verzwickt die Sache! 😉
 
if ((day<1) && (day>31)) {
System.out.println("Tag nicht vorhanden"); }

so vielleicht?

Meines wissens nach gibt es aber leider keine Zahl, die sowohl kleiner 1 als auch größer 31 ist. :noe:


Deine Klammerung sieht irgendwie merkwürzig aus.

Java:
    public void setDay(int Day) {
    this.day = day;
    } // <- hier ist die set methode zuende 
{ if (day<1 || day>31) { // wo steht denn dieser block?!
    System.out.println("Tag nicht vorhanden"); }

Es sollte jedoch funktionieren mit diesem Test.

Java:
public void setDay( int day ) {
     this.day = day;
     if ( day < 1 || day > 31 )  {
          System.out.println( "Invalid Day-Range" );
     }
}
 
wandle das eingegebene Datum in ein "Date"um
wirft das nen Fehler, hast du doch was du willst...

SimpleDateFormat kann helfen, oder JodaTime - so zum googlen 🙂
 
Wäre jetzt auch nicht so das optimum.
Wieso sollte ich den Tag setzen, wenn er doch ungültig ist 😉

Vielleicht weil ein setter niemals Werte verändern sollte, sondern nur setzen 😉
Ein setter sollte auch keine Logik zum Input-Check enthalten.

Dass falscher Input wo anders kontrolliert werden sollte ist klar.
 
Zuletzt bearbeitet:
Vielleicht weil ein setter niemals Werte verändern sollte, sondern nur setzen 😉
Damit komme ich noch klar ...

Ein setter sollte auch keine Logik zum Input-Check enthalten.
Wozu ist eine Setter-Methode denn sonst da? Das Objekt kontrolliert hierüber, dass der Wert, der gesetzt werden soll, ihm auch passt. Wenn nicht, dann sollte die Methode eine entsprechende Rückmeldung geben (so wie sie das hier auch tut). Das ist doch der Sinn von Kapselung und kontrollierter Zugriff auf Objektvariablen.

Dass falscher Input wo anders kontrolliert werden sollte ist klar.
Wo denn sonst?
 
ich sehe das auch so wie harley.
Die Methode sollte evtl auch eine invalidArgumebtException o. Eine eigene exception werfen, um die unpassende zuweisung aufmerksam zu machen
 
Wozu ist eine Setter-Methode denn sonst da? Das Objekt kontrolliert hierüber, dass der Wert, der gesetzt werden soll, ihm auch passt. Wenn nicht, dann sollte die Methode eine entsprechende Rückmeldung geben (so wie sie das hier auch tut). Das ist doch der Sinn von Kapselung und kontrollierter Zugriff auf Objektvariablen.

Habe dieses Thema gerade mal gegooglet, und es scheinen viele auf eure Weise zu machen.
Wir haben es jedoch anders gelernt, und ich persönlich bevorzuge meine Variante aus vielen Gründen.

Ein Setter hat bei uns eine einzige Aufgabe, und zwar einen Wert zu setzen.
Checken tun wir über andere Wege, die wesentlich besser gewählt sind.

Ich würde allerhöchstens einen NullPointer-Check in einen Setter verfrachten.
Scheint aber Geschmackssache zu sein.



Aber das steht hier gar nicht zur Debatte.
Bei einem Anfänger geht es denke ich erst mal nur um die Lösung des Problems, nicht den Aufbau 😉
Interessant wäre jetzt nur noch, wie weit die TE mit dem Problem gekommen ist.
 
Zuletzt bearbeitet:

Zurück
Oben