Compiler-Fehler Queue als ArrayList mit Exceptions

MopedTobias

Mitglied
Hallo,

ich habe die Aufgabe eine Warteschlange zu erstellen und Laufzeitfehler mit Exceptions abzufangen. Die Methoden: hinzufügen, herausnehmen und zeigen werden erwartet. Die Queue soll als Ringspeicher implementiert sein.
Das, was ich geschrieben habe, wird leider nicht kompiliert. Ich weiß nicht, wie ich das Ende der Warteschlange ansprechen kann. Offensichtlich gibt es da einen Fehler queue[tail] funktioniert also nicht. Ansonsten lass ich mich gerne noch weiter beraten.
Danke schonmal und viele Grüße.

Java:
import java.util.ArrayList;

/**	Prgramm zur Implementierung einer
	Warteschlange mit Exception-Handling
*/

class QueueException extends Exception {
	public QueueException() { super();} 		//Konstruktor
	public QueueException(String q) { super(q);}	//Konstruktor
}

public class Warteschlange {

	// Instanzvariablen
	private int head; // erstes Element in der Queue
	private int tail; // erster freier Platz in der Queue
	private static ArrayList<String> queue; // Integer-Array fuer die Elemente

	// Konstruktoren

	// Initialisierungskonstruktor
	// Leere Queue der Groesse max
	public Warteschlange(int laenge) {
		queue = new ArrayList<String>(laenge);
		head = 0;
		tail = 0;
	}

	// Standardkonstruktor
	// Leere Queue der Groesse 5
	public Warteschlange() {
		this(5);
	}

	// String in die Warteschlange einstellen
	public void enqueue(String e) throws QueueException{
		if (!full()) {
			queue[tail] = e;
			if (++tail == queue.size()) {
				tail = 0;
			}
		} else {
			throw new QueueException("Versuchtes Schreiben auf volle Queue");
		}
	}

	// String aus der Warteschlange herausnehmen
	public int dequeue() throws QueueException {
		if (!empty()) {
			int e = queue[head];
			if (++head == queue.size())
				head = 0;
			return e;
		} else {
			throw new QueueException("Versuchter Zugriff auf leere Queue");
		}
	}

	// Oberster Eintrag in der Warteschlange
	public int head() throws QueueException{
		if (!empty()) {
			return queue[head];
		} else {
			throw new QueueException("Versuchter Zugriff auf leere Queue");
		}
	}

	// Test, ob WS voll ist
	public boolean full() {
		return ((tail == queue.size() -1) && (head == 0))
					|| (head == (tail + 1));
	}

	// Test, ob WS leer ist
	public boolean empty() {
		return head == tail;
	}

	// Ausgabe der Warteschlange
	static void show(ArrayList<String> queue) {
		for (int i = 0; i < queue.size(); ++i) {
			System.out.println((String)queue.get(i));
		}
		System.out.println("---");
	}
	
	
	//public int size();

	public static void main(String args) {
		ArrayList<String> queue1 = new ArrayList<String>(3);
		queue1.enqueue("a");
		queue1.enqueue("b");
		queue1.enqueue("c");
		System.out.println(queue);
	}
}
 

Volvagia

Top Contributor
Natürlich kompiliert das nicht.

queue[tail] und queue[head] ergeben 0 Sinn. [STRIKE]In dequeue gibt es e nicht.[/STRIKE] In einer ArrayList gibt es keine Methode enqueue. Und das die ArrayList statisch ist ist für mein Annahme ein schwerer Bug.

Zu schade, dass Kompiler keine Fehlermeldungen ausgeben, worin steht was er nicht mag.

[EDIT]Übersehen, das es auskommentiert ist.[/EDIT]
 
Zuletzt bearbeitet:

MopedTobias

Mitglied
Wieso gibt es denn in einer ArrayList kein enqueue? Ist was an meiner Methode falsch?
Kann ich eine ArrayList mit einer festen Größe erstellen, damit ich eine Exception bringen kann, wenn die Liste voll ist?

Danke für eure Antworten

Habe auch noch ein bisschen an dem Quellcode getüftelt:

Java:
import java.util.ArrayList;

/**	Prgramm zur Implementierung einer
	Warteschlange mit Exception-Handling

*/

class QueueException extends Exception {
	public QueueException() { super();} 		//Konstruktor
	public QueueException(String q) { super(q);}	//Konstruktor
}

public class Warteschlange {

	// Instanzvariablen
	private int head; // erstes Element in der Queue
	private int tail; // erster freier Platz in der Queue
	private ArrayList<Integer> queue; // Integer-Array fuer die Elemente

	// Konstruktoren

	// Initialisierungskonstruktor
	// Leere Queue der Groesse laenge
	public Warteschlange(int laenge) {
		queue = new ArrayList<Integer>(laenge);
		head = 1;
		tail = 2;
	}

	// Standardkonstruktor
	// Leere Queue der Groesse 5
	public Warteschlange() {
		this(5);
	}

	// String in die Warteschlange einstellen
	public void enqueue(int e) throws QueueException{
		if (!full()) {
			this.tail = e;
			if (++tail == queue.size()) {
				tail = 0;
			}
		} else {
			throw new QueueException("Versuchtes Schreiben auf volle Queue");
		}
	}

	// String aus der Warteschlange herausnehmen
	public int dequeue() throws QueueException {
		if (!empty()) {
			int e = this.head;
			if (++head == queue.size())
				head = 0;
			return e;
		} else {
			throw new QueueException("Versuchter Zugriff auf leere Queue");
		}
	}

	// Oberster Eintrag in der Warteschlange
	public int head() throws QueueException{
		if (!empty()) {
			return this.head;
		} else {
			throw new QueueException("Versuchter Zugriff auf leere Queue");
		}
	}

	// Test, ob WS voll ist
	public boolean full() {
		return ((tail == queue.size() -1) && (head == 0))
					|| (head == (tail + 1));
	}

	// Test, ob WS leer ist
	public boolean empty() {
		return head == tail;
	}

	// Ausgabe der Warteschlange
	public void show() {
		for (int i = 0; i < this.tail; ++i) {
			System.out.println(i);
		}
		System.out.println("---");
	}

	public static void main(String[] args) throws QueueException {
		Warteschlange queue1 = new Warteschlange(3);
		queue1.enqueue(1);
		queue1.enqueue(2);
		queue1.enqueue(3);
		queue1.show();
		queue1.enqueue(4);
		queue1.show();
		queue1.dequeue();
		queue1.show();
		queue1.enqueue(5);
		queue1.enqueue(6);
		queue1.enqueue(7);
		queue1.enqueue(8);
		queue1.show();
	}
}
 
Zuletzt bearbeitet:
S

SlaterB

Gast
> Wieso gibt es denn in einer ArrayList kein enqueue? Ist was an meiner Methode falsch?

diese pauschalen Fragen, kurz gestellt und andere können dann immer viel dazu erzählen ;)

1. Volvagia meinte deinen queue1.enqueue()-Aufruf in der main-Methode,
das sollte sich gewiss auf ein Warteschlange-Objekt beziehen, wie du es jetzt ja hast,
insofern eigentlich schon erlegigt

2. in ArrayList gibt es in der Tat kein enqueue(), und das ist auch gut so!
denn eine ArrayList ist ja keine Queue, du baust das erst nach, das Höhere wird aus dem 'Kleineren' aufgebaut,
wer ein Haus aus Holzbalken baut, fragt ja auch nicht wieso der Holzbalken keine Tür hat

3. deine enqueue()-Methode in Warteschlange ist in der Tat falsch, z.B. fügt sie nichts in die ArrayList ein


> Kann ich eine ArrayList mit einer festen Größe erstellen, damit ich eine Exception bringen kann, wenn die Liste voll ist?

schwerlich und sowohl unnötig als auch im Sinne der Aufgabe falsch,
es ist gerade die Aufgabe deiner Methode(n), diesen Punkt zu kontrollieren, und das machst du mit der full()-Methode ja auch mehr oder weniger erfolgreich
(die Länge aus dem Konstruktor musst du anders merken und nutzen, nicht durch Übergabe an ArrayList),
vielleicht als zusätzliches Sicherheitsnetz nett, falls dein full()-Check versagt,
aber ich tendiere langsam zu: nein, das gibt wohl ganz und gar nicht


-----

head und tail sind in der Tat fraglich, die Elemente sollten alle in der Liste stehen,
maximal kannst du Indexe für die Liste merken, aber mit Index 0 für Anfang und ArrayList.size() für deren Ende bist du wohl gut ausgestattet

edit:
je mehr ich schaue, desto schlimmer wirds,
die Ausgabe der Methode gibt die i-Werte 1, 2, 3 usw. hintereinander aus?!
es wird ja gar nicht versucht, irgendwie gespeicherte Werte abzufragen..,
die Queue soll doch Zahlen abspeichern?

passend dazu dein Test
Java:
        queue1.enqueue(1);
        queue1.enqueue(2);
        queue1.enqueue(3);
..

speichere lieber 40805, 4895, -5689 und 38888 ab, wenn die so in dieser Reihenfolge gespeichert,
wieder ausgegeben werden, nach Löschung der negativen Zahl die anderen drei in richtiger Reihenfolge übrig bleiben,
dann sieht es langsam gut aus,
ok, in einer Warteschlange löscht man wohl nicht in der Mitte
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Collections Queue mittels ArrayList Java Basics - Anfänger-Themen 2
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
N Vererbung Queue bestehend aus Superclass- und Subclass-Objekten Java Basics - Anfänger-Themen 7
B Zahlenfolge von Queue in Stack Java Basics - Anfänger-Themen 29
J Java Queue mit default Werten erstellen Java Basics - Anfänger-Themen 4
P Priority Queue Performance Java Basics - Anfänger-Themen 3
Chabub Hilfe bei Stacks und Queue Java Basics - Anfänger-Themen 2
G Stack und Queue Arbeitsblatt Java Basics - Anfänger-Themen 3
F Queue zyklisch Java Basics - Anfänger-Themen 8
D Queue vs. Stack Java Basics - Anfänger-Themen 6
L Queue mithilfe von 2 Stacks erstellen Java Basics - Anfänger-Themen 1
B Automatisierung von Jobs / @EJB Scheduler / Verhinderung, dass Queue überläuft Java Basics - Anfänger-Themen 2
A Priority Queue / Comparator Java Basics - Anfänger-Themen 6
J Queue Warteschlange Java Basics - Anfänger-Themen 3
J Liste,Queue,Stack sortieren Java Basics - Anfänger-Themen 2
Y Unendlicher Ringbuffer (Queue) Java Basics - Anfänger-Themen 49
C Stack und Queue in Aktion (Bitte Hilfe für die Klausur) Java Basics - Anfänger-Themen 7
E Stack vs Queue - Gemeinsamkeiten / Unterschiede Java Basics - Anfänger-Themen 7
H Collections StackOverflowError in einer Queue Java Basics - Anfänger-Themen 3
R Klassen Die lineare Datenstruktur Queue Java Basics - Anfänger-Themen 3
JokerBlacky Klassen Klasse Queue Klasse mit Attributen anhängen und auslesen können Java Basics - Anfänger-Themen 4
K Queue enq Fehler Java Basics - Anfänger-Themen 2
F Thread der auf eine Queue wartet, sicher beenden Java Basics - Anfänger-Themen 4
A Queue (Array) leeren Java Basics - Anfänger-Themen 1
F HTTP Get Queue Java Basics - Anfänger-Themen 7
J Queue zyklisch auslesen Java Basics - Anfänger-Themen 4
B Generische Queue programmieren Java Basics - Anfänger-Themen 5
T Priority-Queue Java Basics - Anfänger-Themen 9
S Integer/Value-Paar in Prio-Queue ohne Comparator Java Basics - Anfänger-Themen 5
P Array queue problem Java Basics - Anfänger-Themen 1
L Queue programmieren via BlueJ Java Basics - Anfänger-Themen 5
B Multithreading und eigene Queue entwickeln Java Basics - Anfänger-Themen 3
I Erste Schritte Queue Java Basics - Anfänger-Themen 14
G Queue auf einer Seite löschen, andre Seite schreiben Java Basics - Anfänger-Themen 3
G Queue mit int oder float Java Basics - Anfänger-Themen 3
Q queue.remove Element trotzdem noch vorhanden. Java Basics - Anfänger-Themen 10
P Priority Queue Java Basics - Anfänger-Themen 6
S Fehler beim Auslösen des ActionListeners in Verbindung mit einer Queue Java Basics - Anfänger-Themen 5
B Queue mit Daten aus einem Stack füllen Java Basics - Anfänger-Themen 21
T Collections Queue<? extends Number> add() offer() Java Basics - Anfänger-Themen 13
S Queue als doppelt verkettete Liste Java Basics - Anfänger-Themen 2
R NullPointerException in Queue-Implementierung Java Basics - Anfänger-Themen 11
B Queue problem! Java Basics - Anfänger-Themen 2
R Queue abhören und Message in Browser ausgeben Java Basics - Anfänger-Themen 3
T Erstellung von Queue mit verkketten listen Java Basics - Anfänger-Themen 3
kulturfenster Stack / Queue Implementationen Java Basics - Anfänger-Themen 11
K Priority Queue - wo ist denn jetzt der Vorteil? Java Basics - Anfänger-Themen 7
W Iterator in Queue Java Basics - Anfänger-Themen 5
Q An erste Stelle in eine Queue eintragen Java Basics - Anfänger-Themen 4
H Stack und Queue Java Basics - Anfänger-Themen 6
M Threadsichere Queue in Java 1.5? Java Basics - Anfänger-Themen 2
G Int-Queue in String-Queue umwandeln Java Basics - Anfänger-Themen 5
A Queue erweitern Java Basics - Anfänger-Themen 13
P Queue, Stacks, Listen Java Basics - Anfänger-Themen 7
S Queue als Array implementiert get()? Java Basics - Anfänger-Themen 4
S Queue als verkettete Liste Java Basics - Anfänger-Themen 9
S Queue Java Basics - Anfänger-Themen 30
K Prüfen, ob Queue leer ist Java Basics - Anfänger-Themen 5
krgewb ArrayList allgemein halten Java Basics - Anfänger-Themen 6
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
String in ArrayList umwandeln Java Basics - Anfänger-Themen 1
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
J ArrayList vergleichen im spiel Mastermind Java Basics - Anfänger-Themen 2
Mugetsu35 ArrayList Update ohne Index Java Basics - Anfänger-Themen 6
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
Z Java ArrayList speichert falsche Daten ab bzw. gibt falsche Daten aus? Java Basics - Anfänger-Themen 42
W if-Abfrage bei ArrayList-Methodenaufrufen - Wie löse ich das? Java Basics - Anfänger-Themen 6
W ArrayList und toString Java Basics - Anfänger-Themen 17
volcanos Addition -> List<Integer> mit Arrays.asList() versus List<Integer>ArrayList<>() Java Basics - Anfänger-Themen 14
ArrayList mit unbekannter Menge an Arrays die Arrays vergleichen Java Basics - Anfänger-Themen 9
M 2d ArrayList durchgehen Java Basics - Anfänger-Themen 2
Blkckroll45 Arraylist Java Basics - Anfänger-Themen 6
H Interface Wieso "List<String> list = new ArrayList<>[…]" Java Basics - Anfänger-Themen 4
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
R Methoden Werte einer ArrayList als Parameter übergeben. Java Basics - Anfänger-Themen 4
L Dauerhaftes Speichern einer Eingabe bei einer ArrayList Java Basics - Anfänger-Themen 26
D Arraylist mit Komplexen Datentyp Java Basics - Anfänger-Themen 3
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
T Permanentes speichern von Objekten in einer ArrayList Java Basics - Anfänger-Themen 6
volcanos List & ArrayList nach Familiennamen abfragen Java Basics - Anfänger-Themen 57
M static ArrayList in non-static Java Basics - Anfänger-Themen 12
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
M ArrayList<TreeNode<T>> fortlaufende Nummerierung der Elemente Java Basics - Anfänger-Themen 5
B Bungeecord | ProxiedPlayer wird nicht in ArrayList hinzugefügt Java Basics - Anfänger-Themen 1
S ArrayList Username und passwort mit JTextField eingaben abgleichen Java Basics - Anfänger-Themen 10
F Werte in einer Arraylist Zählen Java Basics - Anfänger-Themen 2
F Erste Schritte Zahlenreihe von Arraylist in 3erBlöcke sortiert in neue Arraylist Java Basics - Anfänger-Themen 2
M ArrayList mit einer Schleife befüllen Java Basics - Anfänger-Themen 2
F Methode ArrayList mit Eingabewert Java Basics - Anfänger-Themen 2
J ArrayList add methode selbst programmieren Java Basics - Anfänger-Themen 10
K Erste Schritte Wie schnell ist LinkedHashMap im Vergleich zur ArrayList, wenn alle Entries durchlaufen werden? Java Basics - Anfänger-Themen 47
thobren jtable arraylist Java Basics - Anfänger-Themen 12
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
P Schiebefix - ArrayList überschreibt Daten Java Basics - Anfänger-Themen 3
Zeppi OOP ArrayList Java Basics - Anfänger-Themen 2
P ArrayList Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben