# Wartezimmer



## JavaKüken (28. Okt 2008)

Hallo.

Ich hätte da nochmal ne Frage bzgl. meines Programms.

Ich habe nun die Class Person erstellt, die wie folgt aussieht:


```
public class Person {
	private String firstname;
	private String lastname;
	private String socialSecurityNumber;
	
	public Person(String socialSecurityNumber)
	{
		this.socialSecurityNumber = socialSecurityNumber;
	}
	
	public Person(String firstname, String lastname, String socialSecurityNumber)
	{
		this.firstname = firstname;
		this.lastname = lastname;
		this.socialSecurityNumber = socialSecurityNumber;
	}
	
	public void getFirstname() {
		System.out.println(firstname);
	}
	
	public void getLastname() {
		System.out.println(lastname);
	}
	
	public void getSocialSecurityNumber() {
		System.out.println(socialSecurityNumber);
	}
	
	public void setFirstName(String firstname) {
		this.firstname = firstname;
	}
	
	public void setLastName (String lastname) {
		this.lastname = lastname;
	}
}
```


Weiteres hab ich eine Class WaitingRoom, die so aussieht:


```
import java.util.Queue;
import java.util.LinkedList;

public class WaitingRoom {

	public Queue<Person> queue;

	private final int capacity;

	public WaitingRoom(int capacity) {
		this.queue = new LinkedList<Person>();
		this.capacity = capacity;
	}

	public boolean isFull() {
		if (queue.size() == capacity) {
			return true;
		} else {
			return false;
		}

	}

	public boolean isEmpty() {
		if (queue.size() != capacity) {
			return true;
		} else {
			return false;
		}
	}

	public int getCapacity() {
		return this.capacity;
	}
	
	
	public void enter(Person person) {
		if (queue.size() == capacity) {
			System.out.println("The waitingroom is temporarely overcrowded!");
		} else {
			queue.add(person);
		}
	}
}
```

Ich muss nun noch folgenden Fall beachten:

Der Warteraum ist leer, aber der Doktor ruft "Der nächste bitte"

Wie sichert man dies?

Ich benötige auch noch die Methoden: 

-public int getNumberofPersons()
-public Person nextPerson()

Wie wird das im besten Fall implementiert? Bitte um schnelle Hilfe.

Vielen Dank schon mal.

Ganz liebe Grüße


----------



## Der Müde Joe (28. Okt 2008)

isEmpty stimmt immer noch nicht (siehe alter Thread)



> = hat es Personen in der Queue ?
> oder ist die LinkedList leer?
> hier schauen:
> http://java.sun.com/javase/6/docs/api/java/util/LinkedList.html
> va in den Vererbten Methoden (AbstractCollection)



>-public int getNumberofPersons() 

size der LL

>-public Person nextPerson() 

http://java.sun.com/javase/6/docs/api/java/util/Queue.html#poll()


----------



## JavaKüken (28. Okt 2008)

vielleicht so


```
public boolean isEmpty() {
    return (queue.size() <= 0);
 }
```


----------



## Schandro (28. Okt 2008)

```
public boolean isEmpty() {
      if (queue.size() != capacity) {
          true;
      } else {
         return false;
      }
   }
```

wenn z.b. 7 von 10 Leuten im Zimmer sind, isses leer  :roll:  :applaus:

du kannst dir übrigens die if-Abfrage sparen. Statt dem da oben könntest du genausogut:
return queue.size() != capacity;
schreiben, da der "!=" Operator ein boolean zurückgibt


----------



## JavaKüken (28. Okt 2008)

ja tut mir leid schandro, ich lerne noch... oki danke  da war ich eh mal auf der richtigen spur mit meinem zweiten post


----------



## JavaKüken (28. Okt 2008)

dankeschön, man tut sich halt manchmal schwer wenn man noch nicht so geübt ist... aber danke für eure hilfe


----------



## Der Müde Joe (28. Okt 2008)

JavaKüken hat gesagt.:
			
		

> ```
> public boolean isEmpty() {
> return (queue.size() <= 0);
> }
> ```



besser (und funktioniert) , aber in die API gucken:

```
public boolean isEmpty() { return queue.isEmpty(); }
```

(Wobei diese Methode intern wahrscheinlich auch nur (size() == 0) macht)


----------



## JavaKüken (28. Okt 2008)

mit welcher methode ruft ich den die nächste person auf? ich werd irgendwie net clever aus der api *heul*


----------



## Der Müde Joe (28. Okt 2008)

JavaKüken hat gesagt.:
			
		

> mit welcher methode ruft ich den die nächste person auf? ich werd irgendwie net clever aus der api *heul*



The remove() and poll() methods remove and return the head of the queue.

Siehe oben:
http://java.sun.com/javase/6/docs/api/java/util/Queue.html#poll()

EDIT:
Im Genensatz dazu:
The element() and peek() methods return, but do not remove, the head of the queue.


----------



## ARadauer (28. Okt 2008)

JavaKüken hat gesagt.:
			
		

> ja tut mir leid schandro, ich lerne noch... oki danke  da war ich eh mal auf der richtigen spur mit meinem zweiten post


oft sieht man vor lauter unbekannten befehlen, das problem nicht mehr, da hilft es manchmal das problem mit papier und bleistift zu lösen, einfach mal die werte der variablen aufschreiben....


----------



## JavaKüken (28. Okt 2008)

so in etwa? ich steh da ehrlich gesagt total an :-( 

und dann soll noch einer sagen: java is simple


```
public Person nextPersonPlease() {
		queue.poll();
	if (queue.size())
			
		}
```


----------



## Tobias (28. Okt 2008)

Nein, nicht ganz:


```
public Person nextPersonPlease() {
      return queue.poll();
}
```

Edit: Das gibt dann halt einfach null zurück, wenn das WaitingRoom leer ist. Die Ausgabe von Meldungen sollte eigentlich wer anders machen. So richtig gut kann man das auch nicht analog zu deiner enter()-Methode machen, weil du immer auf null testen musst ...


----------



## JavaKüken (28. Okt 2008)

ist denn die methode so ok?


```
public int getNumberOfPersonsInRoom() {
		return queue.size();
```


----------



## Der Müde Joe (28. Okt 2008)

:toll:


----------



## JavaKüken (28. Okt 2008)

juhu 

is das ein super gefühl wenn keine fehlermeldung kommt...


----------



## JavaKüken (28. Okt 2008)

da is jetzt aber noch was... immer wenn der doktor den nächsten aufruft, muss eine person das wartezimmer verlassen... dann einfach 


```
public Person nextPersonPlease() {
		return queue.poll()-1;
```


----------



## Der Müde Joe (28. Okt 2008)

Das dürfte wohl nicht kompilieren.

Die API hilft:
poll:
Retrieves and removes the head of this queue, or returns null if this queue is empty. 

Der Kopf der Queue wird zurückgegeben und von der Queue entfernt.

Entfernt bedeutet, nach dem Ausführen von poll ist size um eins kleiner oder 0, wenn kein Element vorhanden


----------

