Aufgabe im Studium

StevenGG

Mitglied
Hallo zusammen,

ich lerne gerade Java und habe folgende Aufgabe, die ich lösen muss. Kann mir jemand bitte erklären wie bzw. was zutun ist?

In einem Java-Programm fur eine Tierarztpraxis soll das Alter von Hunden erfasst werden. Dazu konnte man eine Klasse ’Hund’ mit einer Instanzvariablen ’Alter’ vom Typ ’int’ anlegen. Der Computer erkennt dann aber nicht, wenn im Java-Programm dieser Variablen irrtumlich ein unzulassiger Wert, wie z.B. ’45’ zugewiesen werden wurde. Wie kann man diese Schwachstelle vermeiden? Implementieren Sie Ihre Losung zu diesem Problem.

Viele Grüße
 

Jw456

Top Contributor
Na das Erstellen einer Klasse und anlegen einer Instanzvariablen wird du doch wohl können.

In der setter Methode könntest du prüfen ob der übergabe Wert im richtigen Werte Bereich liegt.
Bevor du ihn in der Variablen speicherst. Wenn außerhalb Vileicht auch eine Fehlermeldung ausgeben.
 

Neumi5694

Top Contributor
WIe man es prüft, ist einfach. Wie du darauf reagieren willst, ist eine andere Sache.

Falls der Fehler zu einer Meldung führen soll, wäre eine mögliche Reaktion, eine OutOfBounds-Exception zu werfen, die dann extern behandelt werden muss.
Alternativ - falls der Wert automatisch mit der min/max Methode korrigiert werden soll - könnte der Setter per Boolean eine Rückmeldung liefern, ob der Wert korrigiert werden musste oder einfach den effektiv gesetzten Wert als Rückgabe liefern.
 

Jw456

Top Contributor
Für eine OutOfBounds-Exception
Ohne eine Grenze festgelegt zu haben würde die für eien int erst außerhalb
–2147483648 - +2147483647 kommen.
 

Neumi5694

Top Contributor
@Jw456
Mir ist schleierhaft, wie man einen Integerwert außerhalb von Integer.MIN_VALUE und Integer.MAX_VALUE überhaupt erstellen will.
Selbst wenn du einen Long-Wert nach (int) castest, wirst du keinen Wert außerhalb dieser Grenzen erhalten.
 

StevenGG

Mitglied
Na das Erstellen einer Klasse und anlegen einer Instanzvariablen wird du doch wohl können.

In der setter Methode könntest du prüfen ob der übergabe Wert im richtigen Werte Bereich liegt.
Bevor du ihn in der Variablen speicherst. Wenn außerhalb Vileicht auch eine Fehlermeldung ausgeben.
Hey Jw, ich habe mal was gebastelt. Entspricht es der oben genannten Anforderung der Aufgabe? :/

Java:
public class Hund{
 
  private int alter;

   public Hund(int alter){
    this.alter = alter;
   }

    public void setalter(int neuesalter){
        this.alter = neuesalter;
        if (alter<0 || alter>=30)
        System.out.println("Fehlerhafte Eingabe");
        else System.out.println(alter);}
            
}
 
K

kneitzel

Gast
Also zum einen ist im Konstruktor immer noch jedes Alter möglich.

Und bei Dir wird auch jedes Alter gesetzt. Es kommt dann nur noch eine Ausgabe.

Immer etwas nach der Aufgabe richten. Steht da etwas von einer Ausgabe? Wenn nicht, dann braucht man auch keine Ausgabe.

Wenn nur verhindert werden soll, dass ein zulässiger Wert gesetzt wird, dann kann man lediglich dieses Setzen prüfen. Das wäre dann also sowas:
Java:
    public void setAlter(int alter){
        if (alter<0 || alter>=30) return;
        
        this.alter = neuesalter;
    }

Bei einem ungültigen Alter wird also nichts gesetzt. Anforderung an der Stelle erfüllt. Aber man muss das ja irgendwie signalisieren. Da sind dann Exceptions der übliche Weg, also statt dem return dann ein throw new .....
 

StevenGG

Mitglied
Also zum einen ist im Konstruktor immer noch jedes Alter möglich.

Und bei Dir wird auch jedes Alter gesetzt. Es kommt dann nur noch eine Ausgabe.

Immer etwas nach der Aufgabe richten. Steht da etwas von einer Ausgabe? Wenn nicht, dann braucht man auch keine Ausgabe.

Wenn nur verhindert werden soll, dass ein zulässiger Wert gesetzt wird, dann kann man lediglich dieses Setzen prüfen. Das wäre dann also sowas:
Java:
    public void setAlter(int alter){
        if (alter<0 || alter>=30) return;
       
        this.alter = neuesalter;
    }

Bei einem ungültigen Alter wird also nichts gesetzt. Anforderung an der Stelle erfüllt. Aber man muss das ja irgendwie signalisieren. Da sind dann Exceptions der übliche Weg, also statt dem return dann ein throw new .....
Java:
Hund rex = new Hund(2);
rex.setalter(8421);

Welches Alter hat Rex jetzt?
Okay, also wäre theoretisch die Aufgabe mit dem Code von kneitzel erfolgreich erledigt, da es durch die return anweisung nicht zu dem "this.alter = neuesalter;" kommt und rex dürfe nicht das alter 8421 haben richtig?
 

Jw456

Top Contributor
Wie schon mehrfach gesagt wurde entweder im Konstruktor und setter prüfen.
Oder im Konstruktor keinen Wert übergeben der Variablen ein festes alter geben erst mal 0. Im Setter dann das Alter setzen mit prüfen.
Welche Variante du benutzt ist deine Sache.

Wenn der Konstrukteur oder eine andere Methode ein alter übergeben bekommt musst du es prüfen ob es im Bereich ist.
Wie weißt du ja nun.
 

StevenGG

Mitglied
Also mein Lösungsansatz wäre dann folgender code:

Java:
public class Hund{

  private int alter;

   public Hund(int alter){
    alter = 0;
   }

public void setAlter(int neuesalter){
        if (alter<0 || alter>=30) return;
        this.alter = neuesalter;
    }
}
 

Jw456

Top Contributor
wenn du einen festen Wert willst dann übergebe gar keinen Wert.
Kannst in diesem Fall auch den Standart lehren Konstruktor benutzen.
Der alter Variablen kannst du ja gleich das Alter 0 setzen beim erstellen.

Ob das mit der Aufgabenstellung zusammen passt musst du wissen.
 
Zuletzt bearbeitet:

Jw456

Top Contributor
Java:
public class Hund{ private int alter = 0;  public void setAlter(int neuesalter){ if (alter<0 || alter>=30) return; this.alter = neuesalter; } }
 
K

kneitzel

Gast
Also mein Lösungsansatz wäre dann folgender code:

Java:
public class Hund{

  private int alter;

   public Hund(int alter){
    alter = 0;
   }

public void setAlter(int neuesalter){
        if (alter<0 || alter>=30) return;
        this.alter = neuesalter;
    }
}
Bei dem Konstruktor wird derzeit - so wie von @mihe7 schon gesagt, der Parameter alter auf 0 gesetzt. Vermutlich willst Du den Konstruktor ohne Parameter haben.

Und bei der Methode hast Du den Parameter von alter in neuesalter zurück umbenannt. Dadurch prüfst Du nicht den Wert des Parameters sondern den Wert, der derzeit in der Instanzvariable geschrieben steht.
(Bei meinem Code war die Zuweisung aber auch falsch. Das hätte bei mir dann auch this.alter = alter; heißen müssen.

Wen der Parameter so heißt, wie eine Instanzvariable, dann wird die Instanzvariable versteckt. Sprich: im Konstruktor (aber auch bei meiner setAlter Methode) heisst ein Parameter alter. Die Instanzvariable kann man dann nur über die Instanz this erreichen. Daher dann das this.alter = alter.
 

Jw456

Top Contributor
Wenn du die Methode gleich verlassen willst wenn es nicht im Bereich ist must du deine if Bedingung negieren. Damit es passt.
 

StevenGG

Mitglied
Java:
public class Hund{ private int alter = 0;  public void setAlter(int neuesalter){ if (alter<0 || alter>=30) return; this.alter = neuesalter; } }
Vielen Dank erstmal für die schnellen und zahlreichen antworten :)
Ich gehe davon aus, dass diese Variante von Jw die Aufgabe vollständig und richtig erfüllt?
hier wird aber der Konstruktor ja leer gelassen, das heißt man brauch ihn nicht hinschreiben richtig?
 
K

kneitzel

Gast
Ich gehe davon aus, dass diese Variante von Jw die Aufgabe vollständig und richtig erfüllt?
Nein, Du solltest die Anregungen, die wir dir geben, verstehen und umsetzen. Das Verständnis der Punkte ist existenziell. Das musst Du verstehen, damit Du später nicht noch viel mehr Probleme bekommen wirst, weil Dir diese wichtigen Grundlagen fehlen.
hier wird aber der Konstruktor ja leer gelassen, das heißt man brauch ihn nicht hinschreiben richtig?
Wenn der Konstruktor nichts machen soll, dann braucht man keinen hin zu schreiben. Wenn kein Konstruktor vorhanden ist, dann erstellt Java einen default Konstruktor.
 

StevenGG

Mitglied
Nein, Du solltest die Anregungen, die wir dir geben, verstehen und umsetzen. Das Verständnis der Punkte ist existenziell. Das musst Du verstehen, damit Du später nicht noch viel mehr Probleme bekommen wirst, weil Dir diese wichtigen Grundlagen fehlen.

Wenn der Konstruktor nichts machen soll, dann braucht man keinen hin zu schreiben. Wenn kein Konstruktor vorhanden ist, dann erstellt Java einen default Konstruktor.
Okay verstehe, jedoch verstehe ich jetzt nicht was ich noch implementieren soll bzw, stehe auf dem Schlauch. Ich dachte mit dem Code erkennt der Computer, dass ein unzulässiger Wert hingeschrieben wurde.
 

Jw456

Top Contributor
Java:
public void setAlter(int neuesalter){ if (alter<0 || alter>=30) return; this.alter = neuesalter; }

Die Methode macht nicht das was du willst. Teste es im Debugger. Damit du drauf kommst was du falsch machst.


Habe dir eigentlich die Lösung schon genannt.


Tipp was passiert wenn das if true ist?
Was soll da eigentlich passieren?

Tipp zwei benutze die geschweiften Klammern da mit du siehst was bei true und was bei else (false) ausgeführt wird.
 
Zuletzt bearbeitet:

StevenGG

Mitglied
Java:
public class Hund {

    private int alter = 0;

  

    public Hund(int alter) {

      

        if (alter<0 || alter>=30)

        return;

        this.alter = alter;

    }

  

    public void setAlter(int alter)

    { if (alter<0 || alter>=30)

    return;

  

    this.alter = alter; }





public static void main (String[] args) {

Hund rex = new Hund(35);

rex.setAlter(35);



System.out.println(rex.alter);}

}

Ich habe diesen Code im Debugger durchgespielt und er setzt immer wenn ich die Main Methode ausführe wenn ein unzulässiges alter angegeben wird kein alter sondern behält die 0. Damit sollte jetzt alles richtig sein oder sehe ich das falsch :D ?
 

mihe7

Top Contributor
Mal abgesehen davon, dass Deine Formatierung an Körperverletzung grenzt: wenn Du den Code im Konstruktor und der Methode setAlter anschaust, wirst Du feststellen: oh, der ist ja identisch.

Also kannst Du im Konstruktor einfach setAlter(alter) aufrufen (um Schweinereien zu verhindern, müsste man die Methode setAlter noch final deklarieren, aber das ist ein anderes Thema).

Ob Du jetzt die Anforderungen erfüllt hast, kann man schwer beurteilen, da wir den Kontext nicht kennen. Kann sein, dass es reicht, kann sein, dass der Aufgabensteller sich eine Exception (statt dem return) wünscht, wie hier ja schon angesprochen wrude.

Jedenfalls stellt der Code sicher, dass nur ein Alter zwischen 0 und 29 (beide incl.) gesetzt werden kann.
 

StevenGG

Mitglied
Mal abgesehen davon, dass Deine Formatierung an Körperverletzung grenzt: wenn Du den Code im Konstruktor und der Methode setAlter anschaust, wirst Du feststellen: oh, der ist ja identisch.

Also kannst Du im Konstruktor einfach setAlter(alter) aufrufen (um Schweinereien zu verhindern, müsste man die Methode setAlter noch final deklarieren, aber das ist ein anderes Thema).

Ob Du jetzt die Anforderungen erfüllt hast, kann man schwer beurteilen, da wir den Kontext nicht kennen. Kann sein, dass es reicht, kann sein, dass der Aufgabensteller sich eine Exception (statt dem return) wünscht, wie hier ja schon angesprochen wrude.

Jedenfalls stellt der Code sicher, dass nur ein Alter zwischen 0 und 29 (beide incl.) gesetzt werden kann.
Die Formatierung wurde etwas verschoben weil ich das hier reinkopiert habe und es nicht angepasst habe, tut mir leid dafür.
Ja verstehe das tuhe ich ausbessern. Naja die Anforderung steht ja oben in meinem ersten Post, dass ist 1 zu 1 die Aufgabe.

"In einem Java-Programm fur eine Tierarztpraxis soll das Alter von Hunden erfasst werden. Dazu konnte man eine Klasse ’Hund’ mit einer Instanzvariablen ’Alter’ vom Typ ’int’ anlegen. Der Computer erkennt dann aber nicht, wenn im Java-Programm dieser Variablen irrtumlich ein unzulassiger Wert, wie z.B. ’45’ zugewiesen werden wurde. Wie kann man diese Schwachstelle vermeiden? Implementieren Sie Ihre Losung zu diesem Problem."

Wenn der Code aber das sicherstellt dann bin ich froh :)
 

mihe7

Top Contributor
Naja die Anforderung steht ja oben in meinem ersten Post, dass ist 1 zu 1 die Aufgabe.
Die habe ich natürlich gelesen, aber wenn jemand die Intention des Aufgabenstellers einschätzen kann, dann höchstens Du selbst. Es ist halt ein Unterschied, ob ich gerade die erste Schritte mache oder z. B. Exceptions schon behandelt wurden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Informatik Studium Aufgabe Java Basics - Anfänger-Themen 4
T Aufgabe Informatik Studium Java Basics - Anfänger-Themen 10
F Studium aufgabe ...Anfänger sucht hilfe :D Java Basics - Anfänger-Themen 24
D Java Aufgabe fürs Studium (bitte um Hilfe) Java Basics - Anfänger-Themen 8
Jere58 Aufgabe zu Mustern Java Basics - Anfänger-Themen 1
M Interfaces Aufgabe Java Basics - Anfänger-Themen 2
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
Justin4687 Benötige Hilfe bei folgender Aufgabe Java Basics - Anfänger-Themen 2
A Erste Schritte Aufgabe mit while Schleife Java Basics - Anfänger-Themen 11
S Hilfe zu einer Aufgabe Java Basics - Anfänger-Themen 5
M Java Programmierung Aufgabe Anfänger Java Basics - Anfänger-Themen 1
R Hilfe bei Aufgabe Java Basics - Anfänger-Themen 4
Mikejr Java Berg aufgabe Java Basics - Anfänger-Themen 6
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
berserkerdq2 Habe ich die Aufgabe richtig gelöst? Java Basics - Anfänger-Themen 3
D Hilfe bei einer Aufgabe mit for-Schleife Java Basics - Anfänger-Themen 6
Neuling47 Ich zerbreche mit den kopf an einer Aufgabe Java Basics - Anfänger-Themen 61
G Fragen zu Kompelierfehler in Aufgabe. Java Basics - Anfänger-Themen 25
Robert_Klaus Hamster java Simulation Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
I matrix aufgabe Java Basics - Anfänger-Themen 22
J Brauche Hilfe bei for-each Aufgabe Java Basics - Anfänger-Themen 1
9 Aufgabe Bruttorechner Java Basics - Anfänger-Themen 14
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
J Brauche Hilfe bei Aufgabe Java Basics - Anfänger-Themen 4
J boolean aufgabe Java Basics - Anfänger-Themen 9
D Snake-Spiel ähnliche Aufgabe Hilfe Java Basics - Anfänger-Themen 3
M Hilfe - Array Aufgabe Java Basics - Anfänger-Themen 8
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
S Schulaufgabe - verstehe leider die Aufgabe nicht Java Basics - Anfänger-Themen 4
Leo0909 Ich brauche Hilfe bei dieser Aufgabe Java Basics - Anfänger-Themen 2
R Eclipse Aufgabe Java Basics - Anfänger-Themen 4
J OOP-Aufgabe Java Basics - Anfänger-Themen 15
Helix19 Informatik Grundkurs (Haus-)Aufgabe Java Basics - Anfänger-Themen 5
P eine kleine Aufgabe mit Audio Java Basics - Anfänger-Themen 1
TimoN11 Verständnisfrage bei Aufgabe Java Basics - Anfänger-Themen 2
TimoN11 Java spezielle Suchprobleme - Aufgabe Java Basics - Anfänger-Themen 5
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 2
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 9
dieter000 Aufgabe Hilfe Java Basics - Anfänger-Themen 18
jonathanpizza Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
Q Hilfe auf Aufgabe(Matrixmultiplikation) Java Basics - Anfänger-Themen 1
jonathanpizza Hilfe bei der Aufgabe Java Basics - Anfänger-Themen 19
justemii Gehalt berechnen - Aufgabe Java-Programm Java Basics - Anfänger-Themen 9
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
C Rechnungen-Aufgabe Java Basics - Anfänger-Themen 18
C Biene-Aufgabe Java Basics - Anfänger-Themen 2
K Algorithmen und Datenstrukturen Programmier Aufgabe Java Basics - Anfänger-Themen 10
M Verständnisfrage zu eine Online Aufgabe Java Basics - Anfänger-Themen 7
T Aufgabe Flussdiagramm, kann jemand checken? Java Basics - Anfänger-Themen 8
B Methoden Ausgeben Aufgabe Java Basics - Anfänger-Themen 15
M Lösung Aufgabe - Java Programmiren lernen für Dummies Java Basics - Anfänger-Themen 11
J Rekursion Klausur Aufgabe Java Basics - Anfänger-Themen 2
J Exception-Aufgabe Java Basics - Anfänger-Themen 8
I Methoden char Array Aufgabe (bitte hierbei um Hilfe) Java Basics - Anfänger-Themen 3
F Aufgabe: Abstand von einem Punkt zu einem anderen Punkt Java Basics - Anfänger-Themen 10
T Aufgabe zum Verschlüsselungsalgorithmus Java Basics - Anfänger-Themen 11
J Erste Schritte Aufgabe Java Basics - Anfänger-Themen 24
T Methoden BinaryTree transformieren Aufgabe Java Basics - Anfänger-Themen 36
J Brauche Hilfe bei einer aufgabe Java Basics - Anfänger-Themen 1
J Hat jemand einen Lösungsansatz für diese Aufgabe? Java Basics - Anfänger-Themen 1
S Sortieralgorithmus - Aufgabe mit Lösungsidee Java Basics - Anfänger-Themen 20
A Aufgabe: Gleitkommazahlen Java Basics - Anfänger-Themen 3
A Java-Programmierungs Aufgabe Java Basics - Anfänger-Themen 2
U Aufgabe zu Kontrollstrukturen Java Basics - Anfänger-Themen 8
G Probleme bei Aufgabe Java Basics - Anfänger-Themen 12
J Aufgabe als Feuertaufe Java Basics - Anfänger-Themen 8
S Unbedingte hilfe bei Java Aufgabe [Schleife / Zinsrechnung] Java Basics - Anfänger-Themen 14
J Hilfe bei Java Aufgabe (Restschuld berechnen) Java Basics - Anfänger-Themen 11
G Ratlosigkeit zur Aufgabe im Anhang (boolean, equals.) Java Basics - Anfänger-Themen 20
S Hilfe bei Java Aufgabe (Schleifen) Java Basics - Anfänger-Themen 25
B Probleme bei einer Aufgabe Java Basics - Anfänger-Themen 19
B BITTE!! Ich brauche dringende Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 17
H aufgabe 4 Java Basics - Anfänger-Themen 297
M Hilfe bei Projektorientierungs-Aufgabe !! Java Basics - Anfänger-Themen 3
J Java Starthilfe Verständnisfrage Aufgabe Java Basics - Anfänger-Themen 2
H java aufgabe Java Basics - Anfänger-Themen 7
E Mathematische Aufgabe: Antwort entspricht nicht der Lösung Java Basics - Anfänger-Themen 5
H was verlangt die aufgabe ? Java Basics - Anfänger-Themen 10
H java aufgabe Java Basics - Anfänger-Themen 68
H java aufgabe Java Basics - Anfänger-Themen 25
H aufgabe java luhn algorithmus Java Basics - Anfänger-Themen 10
R Java Aufgabe (Teilbarkeit) Java Basics - Anfänger-Themen 7
H java aufgabe Java Basics - Anfänger-Themen 44
H java aufgabe Java Basics - Anfänger-Themen 7
H java string aufgabe Java Basics - Anfänger-Themen 10
H array aufgabe Java Basics - Anfänger-Themen 13
D Erste Schritte Lösen dieser Aufgabe, Hilfe! Java Basics - Anfänger-Themen 12
H aufgabe Java Basics - Anfänger-Themen 9
H lösung aufgabe Java Basics - Anfänger-Themen 12
S Hilfe für Aufgabe Java Basics - Anfänger-Themen 4
H java online aufgabe Java Basics - Anfänger-Themen 4
H Array aufgabe Java Basics - Anfänger-Themen 7
H oop aufgabe probe kalusur Java Basics - Anfänger-Themen 11
H oop aufgabe Java Basics - Anfänger-Themen 19
H JAVA AUFGABE Java Basics - Anfänger-Themen 7
W Thread Aufgabe - Vorgehensweise Java Basics - Anfänger-Themen 8
J Problem bei Aufgabe "Geldstückelung" Java Basics - Anfänger-Themen 5
P Problem bei Java-Aufgabe Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben