0 Daumen
482 Aufrufe

Frage:

Sorge nun in der Klasse Hund dafür, dass keine NullPointerException mehr auftritt.

Nutze eine einfache Fallunterscheidung, um den problematischen Fall zu vermeiden, sodass ein Aufruf von verwirreHund keinen Laufzeitfehler mehr erzeugt. Stattdessen sollte in diesem Fall einfach nichts passieren.

Unten steht der unveränderte Code und man muss wohl die Methode public void nimmStock verwenden (darauf bezieht sich nämlich verwirreHund)

Es ist zwar kompliziert formuliert, aber im Prinzip soll ich eine if Bedingung einführen, die besagt das null als Stock nicht genommen wird. Nur klappt es bei mir nicht, egal wie ich es mit !=null etc. aufschreibe

Code:

public class Hund {

  private int _alter;
  private String _name;
  private Stock _stock;
 
  public Hund(String name)
  {
      _alter = 0;
      _name = name;
      _stock = null;
  }
 
  public String gibName()
  {
      return _name;
  }
 
  public void feierGeburtstag()
  {
      _alter = _alter + 1;
  }
 
  public int gibAlter()
  {
      return _alter;
  }
 
  public boolean hatStock()
  {
      return _stock != null;
  }

  public void nimmStock(Stock stock)
  {
      if (hatStock())
      {
          return;
      }
      if (stock.gibLaenge() < 200)
      {
          _stock = stock;
      }
  }
 
  public void legeStockAb()
  {
      _stock = null;
  }
}
Avatar von

1 Antwort

0 Daumen

Die Methode

public boolean hatStock()
  {
      return _stock != null;
  }
gibt true zurück, wenn _stock nicht null ist, der Hund also einen Stock besitzt.

In der Methode
    public void nimmStock(Stock stock)
  {
      if (hatStock())
      {
          return;
      }
      if (stock.gibLaenge() < 200)
      {
          _stock = stock;
      }
  }
ist die erste if-Abfrage nicht ganz korrekt. Es passiert nichts, wenn der Hund einen Stock besitzt die Bedingung müsste also lauten: Wenn hatStock() nicht gilt.

Du kannst die Bedingung wie folgt ändern:

if (!hatStock()) ... // Negation
oder

if (hatStock() == false) ... // Auf false überprüfen

Avatar von

Erstmal großes danke an dich und zu der Antwort, dass stimmt teilweise, weil dann

SzenarioErgebnishatStockkorrekt: der Hund hat zunächst keinen Stock.✅

nimmStockkorrekt: der Hund hat in diesem Test keinen gültigen Stock erhalten.✅

nimmStockkorrekt: der Hund hat einen überlangen Stock abgelehnt.✅

nimmStockfalsch: der Hund hat einen gültigen Stock nicht entgegengenommen.❌

Hab's gelöst, indem ich davor eine extra if Bedingung geschrieben habe mit if (stock != null){, dann ging's.

Sehr schön und kein Problem :)

Wo hast du eine weitere If Bedingung hinzugefügt?

Yo XJavaCode, saß bis gerade auch über ne gut lange Zeit an der Aufgabe und bin dann bei der Suche nach einer Lösung ebenfalls auf dieses Forum gestoßen. Ich habe eine für mich passende Lösung gefunden:


public void nimmStock(Stock stock)
  {
      if(stock != null)
      {
          if(stock.gibLaenge() < 200)
          {
          _stock = stock;
          }
      }
  }

MfG und ich hoffe, ich konnte helfen

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community