Stack mit Oberklasse, wieso funktioniert es nicht?

xyt4n

Aktives Mitglied
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 :/

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:
B

bone2

Gast
EntryStack(v) ruft super(v) auf und Stack() ruft dann push(v) auf. Die erste Zeile im Push(v) ist new Entrystack(v).
Da ist dein loop.
 
S

SlaterB

Gast
> Wäre super nett, wenn ihr drüber schauen würdet, ich muss es morgen abgeben :/

viel wertvoller wäre, wenn du es selber erkennst, woran hapert es?
direkt aus dem Code ist eine Sache, aber der Fehler gibt doch genaue Anleitung:
> Stack.<init>(Stack.java:9)
<init> steht für Konstruktor, aber reicht ja auch die Zeilennummer, was passiert in Zeile 9?
der Konstruktor ruft push() auf,

was macht push() von EntryStack, Zeilennummer ist ja wieder angegeben?
erzeugt einen neuen EntryStack,
also wieder Stack-Konstruktor, wieder push() usw.

nicht klar?
wie der Loop zu durchbrechen ist musst du wissen, besser in Konstruktoren nichts machen, aber ok, einen Wert speichern will man wohl schon,
nur scheint push() dafür nicht geeignet, damit wird ja eher ein Nachfolger angelegt, der Wert soll doch wohl im eigenen Element bleiben?

natürlich kann man auch alles auf den ersten Nachfolger schieben,
> public short top() { return (short) getFirst().value; }
geht ja auch in die Richtung,
aber der erste Nachfolger muss dann nun wirklich was machen, nicht auch wieder auf seinen ersten Nachfolger schieben usw.,
du siehst den Loop bisher?

kann ich jetzt auf die Schnelle nicht lösen, da musst du grundsätzlich planen was wo passieren soll, Gesamtkonzept bedenken,
idealerweise erst auf Papier statt in Java,
was passiert beim Anlegen, wie viele Objekte sollen erstellt, wo der erste Value abgelegt werden?
 

xyt4n

Aktives Mitglied
Vielen Dank!

Ich dachte mein Konstruktor und der Oberklassen Konstruktor sei der loop, da ich mich mit vererbung noch nicht so gut auskenne. Hab es nicht gesehen, dass durch push es erst zum loop wurde.

Vielen Dank euch beiden!! Ich konnte das Problemganz einfach durch einen weiteren Konstruktoren für jeweils eine Klasse lösen.
 

Timothy Truckle

Top Contributor
Vielen Dank euch beiden!! Ich konnte das Problemganz einfach durch einen weiteren Konstruktoren für jeweils eine Klasse lösen.
Ich stelle jetzt mal die Frage, die Du Dir hättest stellen sollen:

Warum wir in der Methode
Code:
push
ein neuer Stack erstellt?:idea:

Statt den die Fehrlerursache zu beseitigen hast Du 'ne Lösung gefrickelt...;(

bye
TT
 
S

SlaterB

Gast
es ist ja ein Verknüpfung von Elementen, so wie von LinkedList,
irgendwann muss durchaus ein neues Element erstellt werden, jeder kann nur einen Wert speichern
 
S

SlaterB

Gast
die Elemente sind Entrys, EntryStack, davon wird ein neues erzeugt, was anderes ist nicht da,
heißt in Listen auch ListEntry

ob von Stack geerbt werden muss und insgesamt alles gut durchdacht ist, das steht noch aus
 

Landei

Top Contributor
[OT]
• int equals(Stack x) testet die bei compareTo definierte Gleichheit.

So eine Aufgabenstellung sollte man dem Urheber um die Ohren hauen. Wer equals-Methoden mit falscher Signatur schreibt, frisst auch kleine Kinder. Auch wenn es "geht", sollte so eine Stolperfalle von Anfang an vermieden werden.[/OT]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A stack Java Basics - Anfänger-Themen 14
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
V Ist Off-Heap-Speicher dasselbe wie Stack-Speicher? Java Basics - Anfänger-Themen 2
izoards Stack... Java Basics - Anfänger-Themen 17
Csircc Rekursive Methode Stack Overflow Java Basics - Anfänger-Themen 10
B Zahlenfolge von Queue in Stack Java Basics - Anfänger-Themen 29
L Stack bilden, push und pop Java Basics - Anfänger-Themen 16
KogoroMori21 Stack und Heap Speicher Java Basics - Anfänger-Themen 1
G Stack und Queue Arbeitsblatt Java Basics - Anfänger-Themen 3
G Stack programmieren Java Basics - Anfänger-Themen 6
Z Datentypen Stack based calculator Java Basics - Anfänger-Themen 8
F speicherort stack oder heap Java Basics - Anfänger-Themen 1
S Rekursiven Stack Java Basics - Anfänger-Themen 6
Curtis_MC Collections Zufälliges Element aus Stack Java Basics - Anfänger-Themen 2
D Queue vs. Stack Java Basics - Anfänger-Themen 6
P Stack, Heap Java Basics - Anfänger-Themen 13
D Erste Schritte Stack im Rollenspiel Java Basics - Anfänger-Themen 76
J Stack mit Benutzereingabe Java Basics - Anfänger-Themen 17
J Liste,Queue,Stack sortieren Java Basics - Anfänger-Themen 2
C Stack und Queue in Aktion (Bitte Hilfe für die Klausur) Java Basics - Anfänger-Themen 7
S Sequenz von Zahlen bei einem Stack möglich oder nicht möglich? Java Basics - Anfänger-Themen 5
E Stack vs Queue - Gemeinsamkeiten / Unterschiede Java Basics - Anfänger-Themen 7
C Laufzeit von Stack Operation Java Basics - Anfänger-Themen 5
4 Stack over flow bei rekursiver Tiefensuche Java Basics - Anfänger-Themen 5
J Quicksort mit Stack Java Basics - Anfänger-Themen 4
A Anzahl der Elemente in einem Stack wiedergeben Java Basics - Anfänger-Themen 3
T Stack Overflow - Rekursive Fibonacci Java Basics - Anfänger-Themen 10
K Tiefen- und Breitensuche beim Baum durch Stack und Warteschlange Java Basics - Anfänger-Themen 1
L Liste mittels Stack implementieren Java Basics - Anfänger-Themen 0
A Stack programmieren -> Unklarheiten Java Basics - Anfänger-Themen 1
C Stack - listenbasierte Implementierung Java Basics - Anfänger-Themen 4
L Mit rekursiven Aufrufen einen Stack emulieren Java Basics - Anfänger-Themen 1
T Frage zu Java Stack Java Basics - Anfänger-Themen 5
D Stack-Objekt - LIFO - wait(); notify(); Java Basics - Anfänger-Themen 0
J Array von Objekten, wie schauts im Heap / Stack aus ? Java Basics - Anfänger-Themen 7
M Frage zu Stack und Heap Java Basics - Anfänger-Themen 1
Farbenfroh Suche Übungsaufgaben: BinaryTree, Stack Java Basics - Anfänger-Themen 0
D Aufgabe: Stack mit Iterator Java Basics - Anfänger-Themen 8
B Stack/Heap Frage Java Basics - Anfänger-Themen 36
K Probleme mit stack Java Basics - Anfänger-Themen 7
K Wofür wird heute noch die Stack Klasse in Java genutzt Java Basics - Anfänger-Themen 4
F Rekursion Tiefensuch-Problem - Stack Overflow Java Basics - Anfänger-Themen 9
P LinkedList - Stack ... grundlegende Frage Java Basics - Anfänger-Themen 5
B Stack in eine verkettete Liste pushen Java Basics - Anfänger-Themen 4
J OOP Warum braucht man den Stack Java Basics - Anfänger-Themen 3
B Queue mit Daten aus einem Stack füllen Java Basics - Anfänger-Themen 21
G Stack invertieren Java Basics - Anfänger-Themen 3
H Pseudo-Stack (char[] stackArray) mit Zeichen aus einer .txt-Datei befüllen Java Basics - Anfänger-Themen 5
S Stack Problem mit Objekt Java Basics - Anfänger-Themen 2
X String mit String von Objekt im Stack vergleichen? Java Basics - Anfänger-Themen 14
D Stack auslesen mit pop Java Basics - Anfänger-Themen 2
S Stack als verkettete liste/ toString methode Java Basics - Anfänger-Themen 3
S Exceptions bei push/pop in Stack Java Basics - Anfänger-Themen 8
S Eigene Stack Klasse Java Basics - Anfänger-Themen 26
S Stack: Klasseninvariante Java Basics - Anfänger-Themen 4
L OOP Wrapper Klassen - Stack-Aufgabe Java Basics - Anfänger-Themen 2
M Frage zu Stack Java Basics - Anfänger-Themen 3
D Problem mit Set, Stack und Random Java Basics - Anfänger-Themen 2
O Stack Implementierung als verkettete Liste Java Basics - Anfänger-Themen 8
T Probleme bei einen Stack der über drei Dateien funktionieren soll Java Basics - Anfänger-Themen 5
V java.util.Stack Java Basics - Anfänger-Themen 9
K Stack und immer gleiches Objekt Java Basics - Anfänger-Themen 11
kulturfenster Stack / Queue Implementationen Java Basics - Anfänger-Themen 11
S Stack einlesen. Java Basics - Anfänger-Themen 2
E Stack kann nicht implimentiert werden Java Basics - Anfänger-Themen 11
E Eigene Stack Klasse schreiben Java Basics - Anfänger-Themen 12
J Stack Java Basics - Anfänger-Themen 3
K min-int-Wert in'nem Stack Java Basics - Anfänger-Themen 8
L Stack UpnRechner Java Basics - Anfänger-Themen 4
B Stack mit Bildern füllen Java Basics - Anfänger-Themen 2
B Stack mit Strings in zufälliger Reihenfolge füllen Java Basics - Anfänger-Themen 4
J Stack, der Integer-Zahlen enthält Java Basics - Anfänger-Themen 3
K Array Stack Java Basics - Anfänger-Themen 6
O Stack-Klasse Java Basics - Anfänger-Themen 7
S Stack mit Arrays Java Basics - Anfänger-Themen 3
T generischer stack Java Basics - Anfänger-Themen 3
Z Keller/Stack Problem Java Basics - Anfänger-Themen 11
H Stack und Queue Java Basics - Anfänger-Themen 6
M Stack SetValTop Java Basics - Anfänger-Themen 6
G Die Klasse Stack selber schreiben. Java Basics - Anfänger-Themen 2
F Klammertest mit Stack implementieren Java Basics - Anfänger-Themen 5
X Stack Java Basics - Anfänger-Themen 14
J Morgen Java-Klausur. Stack, Heap, Method-Area Java Basics - Anfänger-Themen 2
H Unterschied zwischen Stack und Array Java Basics - Anfänger-Themen 3
F MergeSort iterativ mit Hilfe von Stack Java Basics - Anfänger-Themen 5
S stack Java Basics - Anfänger-Themen 3
S Stack invertieren Java Basics - Anfänger-Themen 14
S Stack-Operationen Java Basics - Anfänger-Themen 59
S Stack.pop() wie genau funktioniert das? Java Basics - Anfänger-Themen 3
A Stack, Frage zur Methode push Java Basics - Anfänger-Themen 4
C Anzahl der Elemente auf einem Stack Java Basics - Anfänger-Themen 4
D Stack chaos Java Basics - Anfänger-Themen 2
megachucky kleines problem mit nem STACK Java Basics - Anfänger-Themen 8
I Stack ist auf einmal empty Java Basics - Anfänger-Themen 3
R Beispiele für Stack & Visualisierung Java Basics - Anfänger-Themen 2
R Stack: Wieso funktioiert das? Java Basics - Anfänger-Themen 2
B eine kleine leichte aufgabe mit einem stack programmieren Java Basics - Anfänger-Themen 2
N Stack-Probleme Java Basics - Anfänger-Themen 2
K Stack Overflow Java Basics - Anfänger-Themen 2
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben