Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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.

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.

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}

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;
	}
}

 

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

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.

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.