Schönen Guten Tag zusammen,
Ich habe heute im Laufe des Tages angefangen Aufgaben aus meinem Informatik Buch zu programmieren, um das Thema Queues besser zu verstehen. Naja das funktionierte anfangs auch sehr reibungslos, nur traf ich dann auf ein Problem, welches ich um Gotteswillen nicht lösen konnte, wahrscheinlich ist es einfach zu offensichtlich . Ich weiß nicht ob mein Ansatz richtig ist, wenn nicht, wäre ich dankbar über eine Korrektur.
Zuerst will ich kurz das Szenario beschreiben, welches ich programmieren will. Es geht darum ein Objekt der Klasse Fahrzeug, einer Kolonne einzuordnen, was soweit auch funktioniert. Im zweiten Schritt soll das Fahrzeug aus der Kolonne, in die Schlange Verkehrskontrolle eingeordnet werden und genau da scheitere ich. Bei dem Versuch pFahrzeug der Verkehrskontrolle einzuordnen bekomme ich immer das Problem, dass ich einer non-static varibale keinen static context verweisen kann (vgl. Bild im Anhang).
Ich hoffe, dass mir jemand weiterhelfen kann.
Im folgenden die Quellcodes der unterschiedlichen Klassen.
Fahrzeug:
Kolonne:
Kontrolle:
Queue:
Verwendetes Programm: BlueJ
Ich habe heute im Laufe des Tages angefangen Aufgaben aus meinem Informatik Buch zu programmieren, um das Thema Queues besser zu verstehen. Naja das funktionierte anfangs auch sehr reibungslos, nur traf ich dann auf ein Problem, welches ich um Gotteswillen nicht lösen konnte, wahrscheinlich ist es einfach zu offensichtlich . Ich weiß nicht ob mein Ansatz richtig ist, wenn nicht, wäre ich dankbar über eine Korrektur.
Zuerst will ich kurz das Szenario beschreiben, welches ich programmieren will. Es geht darum ein Objekt der Klasse Fahrzeug, einer Kolonne einzuordnen, was soweit auch funktioniert. Im zweiten Schritt soll das Fahrzeug aus der Kolonne, in die Schlange Verkehrskontrolle eingeordnet werden und genau da scheitere ich. Bei dem Versuch pFahrzeug der Verkehrskontrolle einzuordnen bekomme ich immer das Problem, dass ich einer non-static varibale keinen static context verweisen kann (vgl. Bild im Anhang).
Ich hoffe, dass mir jemand weiterhelfen kann.
Im folgenden die Quellcodes der unterschiedlichen Klassen.
Fahrzeug:
Java:
public class Fahrzeug
{
String Modell;
String Farbe;
String Kennzeichen;
String Verkehrstauglichkeit;
public Fahrzeug(String pModell, String pFarbe, String pKennzeichen)
{
Modell = pModell;
Farbe = pFarbe;
Kennzeichen = pKennzeichen;
Verkehrstauglichkeit=verkehrstauglichkeitP();
}
public String verkehrstauglichkeitP()
{
return new String[]{"Ja","Nein"}[(new Random()).nextInt(2)];
}
Kolonne:
Java:
public class Kolonne
{
Queue<Fahrzeug> kolonne;
public Kolonne()
{
kolonne = new Queue<Fahrzeug>();
}
public void fahrzeugHinzufügen(Fahrzeug pFahrzeug)
{
kolonne.enqueue(pFahrzeug);
System.out.println("Fahrzeug " + pFahrzeug.getModell() + " wurde der Kolonne hinzugefügt.");
}
public void herauswinken()
{
Fahrzeug pFahrzeug = kolonne.front();
Kontrolle.kontrolle.enqueue(pFahrzeug);
kolonne.dequeue();
System.out.println("Fahrzeug " + pFahrzeug.getModell() + " wird jetzt kontrolliert.");
}
public void kolonneAuflösen()
{
while (!kolonne.isEmpty())
{
Fahrzeug pFahrzeug = (Fahrzeug)kolonne.front();
kolonne.dequeue();
}
}
}
}
Kontrolle:
Java:
public class Kontrolle
{
Queue<Fahrzeug> kontrolle;
public Kontrolle()
{
kontrolle = new Queue<Fahrzeug>();
}
public void fahrzeugEinreihen(Fahrzeug pFahrzeug)
{
kontrolle.enqueue(pFahrzeug);
}
}
Queue:
Java:
public class Queue<ContentType> {
/* --------- Anfang der privaten inneren Klasse -------------- */
private class QueueNode {
private ContentType content = null;
private QueueNode nextNode = null;
/**
* Ein neues Objekt vom Typ QueueNode<ContentType> wird erschaffen.
* Der Inhalt wird per Parameter gesetzt. Der Verweis ist leer.
*
* @param pContent das Inhaltselement des Knotens vom Typ ContentType
*/
public QueueNode(ContentType pContent) {
content = pContent;
nextNode = null;
}
/**
* Der Verweis wird auf das Objekt, das als Parameter uebergeben wird,
* gesetzt.
*
* @param pNext der Nachfolger des Knotens
*/
public void setNext(QueueNode pNext) {
nextNode = pNext;
}
/**
* Liefert das naechste Element des aktuellen Knotens.
*
* @return das Objekt vom Typ QueueNode, auf das der aktuelle Verweis zeigt
*/
public QueueNode getNext() {
return nextNode;
}
/**
* Liefert das Inhaltsobjekt des Knotens vom Typ ContentType.
*
* @return das Inhaltsobjekt des Knotens
*/
public ContentType getContent() {
return content;
}
}
/* ----------- Ende der privaten inneren Klasse -------------- */
private QueueNode head;
private QueueNode tail;
/**
* Eine leere Schlange wird erzeugt.
* Objekte, die in dieser Schlange verwaltet werden, muessen vom Typ
* ContentType sein.
*/
public Queue() {
head = null;
tail = null;
}
/**
* Die Anfrage liefert den Wert true, wenn die Schlange keine Objekte enthaelt,
* sonst liefert sie den Wert false.
*
* @return true, falls die Schlange leer ist, sonst false
*/
public boolean isEmpty() {
return head == null;
}
/**
* Das Objekt pContentType wird an die Schlange angehaengt.
* Falls pContentType gleich null ist, bleibt die Schlange unveraendert.
*
* @param pContent
* das anzuhaengende Objekt vom Typ ContentType
*/
public void enqueue(ContentType pContent) {
if (pContent != null) {
QueueNode newNode = new QueueNode(pContent);
if (this.isEmpty()) {
head = newNode;
tail = newNode;
} else {
tail.setNext(newNode);
tail = newNode;
}
}
}
/**
* Das erste Objekt wird aus der Schlange entfernt.
* Falls die Schlange leer ist, wird sie nicht veraendert.
*/
public void dequeue() {
if (!this.isEmpty()) {
head = head.getNext();
if (this.isEmpty()) {
head = null;
tail = null;
}
}
}
/**
* Die Anfrage liefert das erste Objekt der Schlange.
* Die Schlange bleibt unveraendert.
* Falls die Schlange leer ist, wird null zurueckgegeben.
*
* @return das erste Objekt der Schlange vom Typ ContentType oder null,
* falls die Schlange leer ist
*/
public ContentType front() {
if (this.isEmpty()) {
return null;
} else {
return head.getContent();
}
}
}
Verwendetes Programm: BlueJ
Anhänge
Zuletzt bearbeitet: