# Hilfe bei Aufgabe



## sabi001 (10. Jul 2012)

Hallo ihr Lieben 

bin neu hier und habe eine Frage zu java.
Ich muss eine Aufgabe bearbeiten, bin mir aber sicher, dass 
bestimmt etwas falsch ist !
Vllt könntet ihr mir helfen!??

Legen Sie als nachstes eine Klasse Warteschlange mit einer main-Methode an und erganzen Sie ein
privates Attribut erster vom Typ Schlangengast incl. einer passenden getter-Methode. In diesem
Attribut wird der Verweis auf das erste Listenelement gespeichert.
3. Nun braucht unsere Warteschlange noch einige Funktionen. Im folgenden werden die zu implementierenden
Funktionen beschrieben. Die Umsetzung der Methoden bleibt bis auf die Einhaltung der Beschreibung
Ihnen uberlassen.
 void loeschen(): In der Methode soll die Liste komplett geloscht werden.
 int laenge(): Rufen Sie in der Methode eine Hilfsmethode int laenge(Schlangengast gast),
die die Lange der Warteschlange rekursiv berechnet.
 void anstellen(String name, int nummer): In der Methode soll sich { wie der Name schon sagt
{ ein neuer Gast hinten in die Warteschlange einreihen. Uberprufen Sie ob schon ein Gast mit dieser
Ticketnummer existiert, falls nicht fugen Sie einen neuen Schlangengast mit dem Namen name und
der Ticketnummer nummer in die Liste ein. Falls die Ticketnummer schon existiert machen Sie eine
Fehlerausgabe auf stderr.
Tipp: Schreiben Sie sich eine Hilfsmethode die uberpruft ob ein Gast mit einer bestimmten Ticketnummer
in der Warteschlange existiert.
 void rausschmeissen(int nummer): Der Gast mit der Ticketnummer nummer soll aus der Warteschlange
geloscht werden. Falls er nicht existiert { ein Loschen also unmoglich ist { machen Sie eine
Fehlerausgabe auf stderr.

mein programmiertes:

public class Warteschlange {

	private Schlangengast erster;
	private int nummer;


	public Schlangengast getErster(){

		return getErster();
	}


	public void loeschenListe(int Gast){

		 Gast = 0;
	}



	public int gebeLaenge(Schlangengast gast){

		int counter = 0;

		if(gast != null){

		counter++;

		}else{

			return 0;
		}

		return counter;
	}

	public void anstellenGast(String name, int nummer, Schlangengast erster){

		if (erster == null){

			this.erster = erster;
			System.out.println("Erster Gast in der Schlange");

		} else if(nummer == nummer) {
			nummer = this.nummer;
			System.err.println("Ticketnummer existiert bereits");

		}else{

			System.out.println("Der Gast hat den Namen" +name+ "und die  Ticketnummer" +nummer);
		}
	}

	public void rausschmeissenGast(int nummer){

		if(nummer == 0){

			System.out.println("Gast wird gelöscht");
		}
		else{
			System.err.println("Gast existiert nicht");
		}
	}

	public static void main(String[] args) {


	}

Wäre super, wenn ihr mir helfen würdet )


----------



## Gast2 (10. Jul 2012)

Schreib dir eine main() Methode und Teste deine Klasse. Dann siehst du ob sie funktioniert oder nicht.

PS:
Java™ Quelltext ist bitte in [ JAVA ]-Tags zu schreiben: [ JAVA ]hier Java Code einfügen[ /JAVA ]
Steht schön dick über dem Formular


----------



## hüteüberhüte (10. Jul 2012)

Für mich ist die Aufgabenstellung nicht verständlich formuliert. Außerdem enthält sie seltsame Zeichen. Also was soll implementiert werden?

Was mir jetzt schon auffällt, viele Zuweisungen an Parameter-Variablen haben keine Wirkung (werden nur geschrieben, nicht gelesen)


----------



## Firephoenix (10. Jul 2012)

Die Aufgabe sieht allgemein dannach aus als solltest du eine verlinkte Liste bauen, google liefert dazu entsprechend viele Ergebnisse (es sieht auch aus als würde ein Stück im Aufgabentext fehlen)

das hier kann garnicht gehen, 0 ist ein int, Gast ist irgenwas und ein Objekt 0 zuzuweisen hat nichts mit dem löschen einer Liste zu tun (abgesehen davon das es nicht geht sondern der compiler meckert):

```
public void loeschenListe(int Gast){

Gast = 0;
}
```

Die Methode hier hat auch nichts mit der länge zu tun, sondern gibt 1 zurück wenn der übergebene Gast ungleich null ist, ansonsten gibt sie 0 zurück:

```
public int gebeLaenge(Schlangengast gast){

int counter = 0;

if(gast != null){

counter++;

}else{

return 0;
}

return counter;
}
```


und die Methode hier macht garnichts außer ausgeben:

```
public void rausschmeissenGast(int nummer){

if(nummer == 0){

System.out.println("Gast wird gelöscht");
}
else{
System.err.println("Gast existiert nicht");
}
}
```

Das sind allerdings alles Fehler die man von bloßem Draufschauen auch ohne große Java-Kenntnisse findet, wie EikeB also schon gesagt hat: schreib dir eine Main und Teste deine Klasse einfach mal (paar Gäste erzeugen und anstellen, paar Methoden aufrufen und in der liste z.b. mit println() Aufrufen dokumentieren was passiert)

Gruß


----------



## hüteüberhüte (10. Jul 2012)

Hab mal alles Wichtige, was implementiert werden sollte, rot markiert:



sabi001 hat gesagt.:


> Warteschlange -> Klasse, beinhaltet mindestens ein Attribut und Methoden
> main -> für Testzwecke
> erster -> Attribut
> getter -> Methode, gibt das erste Warteschlangenelement zurück
> ...



Was noch fehlt wäre eine Klasse Element/Gast mit Zeiger/Referenzvariable auf das nächste Element sowie mit Attributen für Name und Nummer

Dann fang' mal an und melde dich, wenn du an einer Stelle nicht weiterkommst. Stichworte: verkettete Listen (linked lists) und Queue


----------



## hüteüberhüte (10. Jul 2012)

Ok, kann eh noch net pennen:


```
public class Gast {
 private Gast naechster = null;

 private String name;
 private int nummer;

 public Gast(String name, int nummer) {
  this.name = name;
  this.nummer = nummer;
 }

 // getter und setter, denn naechster, name und nummer sind private
}
```


```
public class Warteschlange {
 private Gast erster = null;

 public void loeschen() {
  erster = null;
 }

 public int laenge() {
  return laenge(erster, 0);
 }

 private int laenge(Gast g, int i) {
  if (g == null) {
   return i;
  }
  return laenge(g.naechster, i + 1); // durch getter ersetzen
 }

 public void anstellen(String name, int nummer) {
  if (erster == null) {
   erster = new Gast(name, nummer);
   return;
  }

  Gast g = erster;
  Gast g2 = null;
  while (g != null) { // iterativer Ansatz
   if (g.nummer == nummer) {
    System.err.println("bereits vorhanden: " + nummmer);
    return;
   }
   g2 = g;
   g = g.naechster;
  }

  g2.naechster = new Gast(name, nummer);
 }

 public boolean enthalten(int nummer) {
  //..
 }

 public void rausschmeissen(int nummer) [
  //..
 }
}
```


----------



## sabi001 (12. Jul 2012)

Dankeschön für die Hilfe 
Sag mal hüteüberhüte woher kannst du so gut programmieren??
Könntest du mir evtl ein gutes Buch oder irgendetwas empfehlen für Anfänger??
Liebe Grüße


----------



## KingOfExceptions (12. Jul 2012)

Ich bin zwar nicht hüteüberhüte aber: Java von Kopf bis Fuss, ist ein guter Einstieg.


----------



## SlaterB (12. Jul 2012)

http://www.java-forum.org/hausaufgaben/138955-warteschlange-konzertes.html


----------

