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