Zum Inhalt springen

Mit Methode prüfen, ob es schon irgendeine Instanz gibt


Empfohlene Beiträge

Gast dtechnology.de
Geschrieben (bearbeitet)

Guten Tag,

folgendes Problem:

Es geht um eine kleine Aufgabe, bei der es Hotels, Zimmer und Personen gibt. Ich möchte prüfen, ob eine Person schon in einem Zimmer ist (Methode: hasPerson). Falls es zu dem Zimmer schon eine Person gibt, soll diese zurückgegeben werden, falls es noch keine Person gibt, soll die übergebene Person gesetzt werden (mit getter und setter; die Überprüfung soll nicht zusätzlich als boolean erfolgen...)

Wie überprüfe ich, ob schon irgendeine Person dem Zimmer übergeben wurde.

public class Zimmer {
	private int zimmernr;
	Person person;
	
	// Getter
	public int getZimmernr() {
		return this.zimmernr;
	}
	public Person getPerson() {
		return this.person;
	}
	
	// Setter
	public void setZimmernr(int zimmernr) {
		this.zimmernr = zimmernr;
	}
	public void setPerson(Person p) {
		this.person = p;
	}
	
	
	// Methode hasPerson: Zimmer belegt?
	public Person hasPerson(Person p) {
		
	}
	
	
	// Konstruktor
	public Zimmer(int zimmernr) {
		this.zimmernr = zimmernr;
	}
	
	public Zimmer(int zimmernr, Person p) {
		this.zimmernr = zimmernr;
		this.person = p;
	}

}

 

Bearbeitet von dtechnology.de
Geschrieben

Was ist denn Person bevor du sie setzt? Wenn du das weißt kannst du darauf überprüfen ;)

Den Namen "hasPerson" finde ich im Übrigen unglücklich gewählt da er eben doch den return eines boolean impliziert. Besser wäre "setPersonIfNotExists" oder so ähnlich.

Geschrieben

Schaue dir mal das "Tell-Don't-Ask"-Prinzip an.

Eigentlich versuchst du jetzt Logik nach Außen zu verlegen. Derjenige, der die Zimmerbuchung implementiert, muss wissen, dass er nicht den Setter verwenden darf, sondern deine hasPerson()-Methode, um nicht fälschlicherweise eine Fehlbuchung zu risikieren. Der Setter umgeht ja komplett die Logik.

vor 42 Minuten schrieb 0x00:

Den Namen "hasPerson" finde ich im Übrigen unglücklich gewählt da er eben doch den return eines boolean impliziert.

Eigentlich schlimmer noch. Der Parameter, der der Methode übergeben wird, impliziert, dass geschaut wird, ob diese Person im Zimmer übernachtet.

Gast dtechnology.de
Geschrieben

Also ich wollte eine Person übergeben, falls das Zimmer schon eine Person hat, soll diese zurückgegeben werden, falls es noch keine Person hat, soll die übergebene Person gesetzt werden. Kann man den Konstruktor irgendwie dazu benutzen?

Pseudocode:
public Person hasPerson(Person p){
if(schon eine Person dem Zimmer zugeordnet){
getPerson} else (wenn noch keine Person dem Zimmer zugeordnet){ p.setPerson}

Gast dtechnology.de
Geschrieben

Ist der Zustand dann nicht null, da ja nicht zwingend eine Person am Zimmer hängt?

Wie könnte ich das am einfachsten lösen?

Hier auch nochmal die Klasse Person:

public class Person {
	private String vorname, nachname, email;
	
	// Getter
	public String getVorname() {
		return this.vorname;
	}
	public String getNachname() {
		return this.nachname;
	}
	public String getEmail() {
		return this.email;
	}
	
	// Setter
	public void setVorname(String vorname) {
		this.vorname = vorname;
	}
	public void setNachname(String nachname) {
		this.nachname = nachname;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	
	
	// Konstruktor
	public Person(String vorname, String nachname, String email) {
		this.vorname = vorname;
		this.nachname = nachname;
		this.email = email;
	}
}

 

Geschrieben
vor 1 Stunde schrieb dtechnology.de:

Ist der Zustand dann nicht null, da ja nicht zwingend eine Person am Zimmer hängt?

Richtig.

Also wie muss dann die Logik lauten, wenn du der Klassenvariable nur einen Wert zuweisen darfst, wenn die Klassenvariable null ist?

Gast dtechnology.de
Geschrieben

Müsste dann
if(this.person == null){ p.setPerson()} else{ this.person.getPerson()}
gehen?
Sorry, aber ich steh grad bisschen auf dem Schlauch

Geschrieben

Nicht ganz aber geht schon in die richtige Richtung. getPerson() hängt ja nicht an der Person-Klasse, sondern an der Zimmer-Klasse. Außerdem hat hasPerson() hat einen Rückgabewert, der bei dir fehlt. ;)

public Person hasPerson(Person p) {
  if(this.getPerson() == null)
    this.setPerson(p);
  
  return this.getPerson();
}

Wenn noch keine Person gesetzt wurde (also this.getPerson() gibt null zurück), dann setzen wir die Person und geben dann die Person zurück, die für das Zimmer gesetzt wurde. Beim zweiten Aufruf der Methode wird das Setzen übersprungen, weil getPerson() uns eine Person zurückgibt und somit ungleich null ist.

Gast dtechnology.de
Geschrieben

Vielen vielen Dank :D
Jetzt leuchtets bei mir ein, bin da einfach nicht drauf gekommen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...