Hallo,
ich hab eine Aufgabe auf, die ich auch schon fast fertig habe, aber beim testen habe ich eine riesige Fehlermeldung bekommen, die ich nicht verstehe.
Ich schätze das irgendwie ein "loop" im Konstruktor ausversehen eingebaut wurde.
Wäre super nett, wenn ihr drüber schauen würdet, ich muss es morgen abgeben :/
Fehler:
ich hab eine Aufgabe auf, die ich auch schon fast fertig habe, aber beim testen habe ich eine riesige Fehlermeldung bekommen, die ich nicht verstehe.
Ich schätze das irgendwie ein "loop" im Konstruktor ausversehen eingebaut wurde.
Wäre super nett, wenn ihr drüber schauen würdet, ich muss es morgen abgeben :/
Erstellen Sie eine abstrakte Klasse Stack mit den abstrakten Methoden
• public abstract Stack push(short x)
• public abstract short top()
• public abstract int size()
und den /nicht abstrakten) Methoden
• public Stack pop(Stack x),
• public boolean isEmpty(),
• public boolean isEntry()
Der Stack hat ebenfalls die Methoden
• int compareTo(Stack x), die den Stack und den Stack x lexikofrafisch vergleicht, < (Ausgabe -1), gleich (Ausgabe 0), > (Ausgabe 1)
• int equals(Stack x) testet die bei compareTo definierte Gleichheit.
Erstellen Sie die abgeleitete Klasse EntryStack extends Stack (Stack aus short-Entries).
Java:
public class EntryStack extends Stack {
private short value;
private EntryStack next;
public EntryStack(short value) {
super(value);
}
public Stack push(short value) {
EntryStack e = new EntryStack(value);
setValue(value);
setNext(null);
if (getLast() == null)
setLast(e);
getFirst().next = e;
setFirst(e);
return getFirst();
}
public short top() {
return (short) getFirst().value;
}
public int size() {
int i = 1;
EntryStack zeiger = new EntryStack((short) 0);
if (getLast() == null)
return 0;
for (zeiger = getLast(); zeiger.getNext() != null; zeiger = zeiger
.getNext())
i += 1;
return i;
}
public short getValue() {
return value;
}
public void setValue(short value) {
this.value = value;
}
public EntryStack getNext() {
return next;
}
public void setNext(EntryStack next) {
this.next = next;
}
}
Java:
public abstract class Stack {
private EntryStack first;
private EntryStack last;
public Stack(short value) {
push(value);
}
public abstract Stack push(short x);
public abstract short top();
public abstract int size();
public Stack pop(Stack x) {
EntryStack zeiger;
if (getLast() == null)
return getFirst();
for (zeiger = getLast(); zeiger.getNext().getNext() != null; zeiger = zeiger
.getNext())
setFirst(zeiger);
zeiger.setNext(null);
return getFirst();
}
public boolean isEmpty() {
return last == null;
}
public boolean isEntry() { // fehlt
return false;
}
public int compareTo(Stack x) { // nicht fertig
EntryStack zeiger1;
EntryStack zeiger2 = x.getLast();
int i = 0;
for (zeiger1 = getLast(); zeiger1.getNext() != null; zeiger1 = zeiger1
.getNext()) {
if (zeiger1 == null && zeiger2 == null)
return 0; // Notwendig? Testen!
if (zeiger1.getValue() < zeiger2.getValue())
return -1;
else if (zeiger1.getValue() == zeiger2.getValue()) {
i += 1;
} else if (zeiger1.getValue() > zeiger2.getValue())
return 1;
}
return 0;
}
public int equals(Stack x) { // fehlt
return 0;
}
public EntryStack getFirst() {
return first;
}
public void setFirst(EntryStack first) {
this.first = first;
}
public EntryStack getLast() {
return last;
}
public void setLast(EntryStack Last) {
this.last = last;
}
}
Java:
public class MainS {
public static void main(String[] args) {
// TODO Auto-generated method stub
EntryStack b = new EntryStack((short) 5);
b.push((short) 1);
}
}
Fehler:
Java:
Exception in thread "main" java.lang.StackOverflowError
at Kevin.Programmieraufgabe.Stack.<init>(Stack.java:8)
at Kevin.Programmieraufgabe.EntryStack.<init>(EntryStack.java:9)
at Kevin.Programmieraufgabe.EntryStack.push(EntryStack.java:13)
at Kevin.Programmieraufgabe.Stack.<init>(Stack.java:9)
at Kevin.Programmieraufgabe.EntryStack.<init>(EntryStack.java:9)
at Kevin.Programmieraufgabe.EntryStack.push(EntryStack.java:13)
at Kevin.Programmieraufgabe.Stack.<init>(Stack.java:9)
.
.
.
.
Zuletzt bearbeitet: