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!
 

turtle

Top Contributor
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)
 

laura88

Mitglied
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! ;)
 

MrClave

Bekanntes Mitglied
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" );
     }
}
 

Phash

Top Contributor
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 :)
 

MrClave

Bekanntes Mitglied
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:

HarleyDavidson

Bekanntes Mitglied
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?
 

Phash

Top Contributor
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
 

MrClave

Bekanntes Mitglied
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:
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Setter Methode Wertebereich eingrenzen Java Basics - Anfänger-Themen 5
J Einige Anfängerfragen (Datentypen, Wertebereich) Java Basics - Anfänger-Themen 11
H Datentypen Wertebereich von <Klassenname> <Variable> Java Basics - Anfänger-Themen 12
F Wertebereich/Datentyp Java Basics - Anfänger-Themen 26
L Wertebereich von boolean Java Basics - Anfänger-Themen 4
G Datentypen Tipps, Ratschläge erwünscht bzgl. Datentyp bestimmen über Wertebereich Java Basics - Anfänger-Themen 5
L Wertebereich if-Satz angeben (z.B: Benzinverbrauch 51 <=75<) Java Basics - Anfänger-Themen 1
F Map, jedoch mit einem Wertebereich Java Basics - Anfänger-Themen 3
K Datentypen Wertebereich float/double - Warum nicht hoch -1 Java Basics - Anfänger-Themen 6
G Wertebereich wie kodieren? Java Basics - Anfänger-Themen 5
R Float Wertebereich Java Basics - Anfänger-Themen 3
R math.random wertebereich 16-21 Java Basics - Anfänger-Themen 3
K OOP Wertebereich Ergebnis von % Operator Java Basics - Anfänger-Themen 8
hdi Wertebereich von double, wtf? Java Basics - Anfänger-Themen 2
K Wertebereich bei Attributdeklaration Java Basics - Anfänger-Themen 2
J Random Wertebereich Java Basics - Anfänger-Themen 2
T Wertebereich auf 0 bis 1 einschränken Java Basics - Anfänger-Themen 10
A Double Scan eingrenzen Java Basics - Anfänger-Themen 2
F Eingabe der int Zahl eingrenzen Java Basics - Anfänger-Themen 6
Z "Eingrenzen von Aktionsraum" Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben