Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Stack / Java / Konstruktor » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 10 Beiträge
Tobias

Ich hab ja nicht geschrieben, dass es falsch ist. Ich bin aber unumstößlich der Auffassung, dass man bei dieser Aufgabe nicht auf vordefinierte Java-Klassen wie Vector oder LinkedList zurückgreifen sollte. Schließlich lernt man so viel weniger.
donvito

Nur zu deiner Info: Der In Java bereits ismplementierte Stack erweitert die Klasse Vektor, also kanns ja nicht so falsch sein.
Tobias

Ich finde es etwas geschummelt einen Vector zu nehmen, wo man hier doch eine kleine einfach-verkettete Liste selbstprogrammieren kann.

Du solltest nicht so faul sein und auf dir bekannte Dinge zurückgreifen, wenn du noch nicht in der Lage bist eine Liste zu programmieren. Das ist absolutes Basiswissen.

Hier noch ein paar Dinge, die mir aufgefallen sind:

isEmpty lässt sich vereinfachen zu
code:
1:
2:
3:
4:
5:
boolean isEmpty() {
   return v.isEmpty();
}



Zu Beginn zeigt der index auf 0. Nachdem du das erste Element gepushed hast steigt er auf 1. Dann popst du ein Element von Position 1, es ist aber erst ein Element auf dem Stack. Meines Wissens fängt der vector bei 0 an zu zählen. Den index kannst du dir aber ganz sparen. Es gibt nämlich die Methoden "vector.lastElement()" und "vector.size()".

Die Funktion pop enthält keine Abfrage ob der Stack leer ist. Außerdem ist es sinnlos, erst ein neues Objekt anzulegen. Mein Vorschlag:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
public Object pop() {

   if (this.isEmpty()) return null;

   Object o = v.lastElement();

   v.removeElementAt(v.size()-1);

   return o;
}


Aber Vector baut auf einer Liste auf und ist hier nicht die beste Lösung. Du solltest dir besser mal anschauen, wie man verkettete Listen programmiert.
ed209

Zitat:
Original von donvito
Thx, hat geklappt :-)

Kennt jemand ne Möglichkeit Eclipse komplett deutsch zu machen, bei mir klappt das nur zu vielleicht 25% außerdem wäre ich dankbar für ne deutsche Anleitung zu Eclipse. Gibts dat? Hab mit dem Debugging extrem Stress


Zu Eclipse gibt es jede Menge Literatur, auch auf Deutsch. Ich hatte ein Buch von Berthold(?) Daum das ganz gut war.
Vermutlich kannst du Eclipse nicht völlig umstellen, da nicht jedes Plug-In Internationalisierung unterstützt. Aber wenn du dich ernsthaft mit Informatik beschäftigen willst kommst du langfristig eh nicht um Englisch drumherum. Daher mein Tip: Lass es komplett auf Englisch. Zumal viele der Übersetzung eh hanebüchen sind.
donvito

Thx, hat geklappt :-)

Kennt jemand ne Möglichkeit Eclipse komplett deutsch zu machen, bei mir klappt das nur zu vielleicht 25% außerdem wäre ich dankbar für ne deutsche Anleitung zu Eclipse. Gibts dat? Hab mit dem Debugging extrem Stress
Crotaphytus

Der Fehler bei der toString-Methode kommt von deiner unguten Angewohnheit, keine Sichtbarkeitsangaben zu machen. Dabei wird Java implizit package einsetzen. Wenn du jetzt die toString-Methode aus Object überschreibst (und genau das machst du), versuchst du damit, diese Methode (die in Object als public definiert ist) auf package einzuschränken. Das mag der Compiler nicht. Also: public davorschreiben, dann passts schon.



@ed: Generics zu kompliziert? Also wenn man sie mal gesehen hat, find ich sie sehr angenehm handzuhaben. Mir kommt das sogar deutlich angenehmer vor, als überall mit Objects zu arbeiten und die dann immer casten zu müssen. Klar, wenn man die Dinger nicht kennt und sich erst einarbeiten müsst wirds komplizierter...
donvito

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
import java.util.Vector;
public class Stack {

	Vector v;
	int index = 0;
	Stack()
	{
		v = new Vector();
	}
	
	boolean isEmpty()
	{
		if (v.isEmpty())
			return true;
		else 
			return false;
		
	}
	void push(Object o)
	{
		v.addElement(o);
		index++;
	}
	Object pop()
	{
		Object o = new Object();
		o = v.elementAt(index);
		v.removeElementAt(index);
		index--;
		return o;
	}
	void reverseStack()
	{
		int size = v.size();
		Vector x = new Vector(size);
		
		while(index >= 0)
		{
			x.addElement(v.elementAt(index));
			v.removeElementAt(index);
			index--;
		}
		v=x;	
	}
	String toString() //erzeugt einenn String zur Ausgabe des Stacks
	{
		index = v.size();
		String s = "";
		while(index > 0)
			{
				s = s + v.elementAt(index).toString() + "\n";
				index--;
			
			
			}
		return s;
	}
	public static void main(String [] args)
	{
		Stack myStack = new Stack();
		myStack.push("Wir");
		myStack.push("sind");
		myStack.push("glücklich");
		System.out.println(myStack.toString());
		
	}
	
}


Habs nu mit nem Vector gemacht. Die kann ich am besten. Leider gibts noch zwei Probleme, die ich ned durchschaue:

Es passt ihm nicht, dass die Methode toString existiert, mit anderem Namen gehts prima. Außerdem meldet er beim debuggen einen seltsamen Fehler, NullPointerEx. in Zeile 21 und Zeile 61 (hängt zusammen). Kapiere nicht wieso das ein Problem darstellt, denn die Variable kriegt ja einen Wert zugewiesen.
ed209

Hi

1. Ich würd das nicht mit Generics machen, um es nicht zu kompliziert zu machen.
2. Wie habt ihr einen Stack definiert. Über eine abstrakte Algebra?
3. Was für einen Stack soll der Konstruktor liefern? Sprich: Was soll bei x = new Stack(); rauskommen?

Gruß,
Peter
Crotaphytus

Das Problem vom Array ist halt, dass du nur eine bestimmte Anzahl an Elementen im Stack haben könntest - das ist eine Einschränkung, die man möglicherweise eher nicht haben will. Du könntest dir natürlich eine Datenstruktur bauen, die intern ein Array verwendet und sobald das voll ist ein größeres Array erzeugt und die Elemente umkopiert. (Genau genommen gibts auch so ne Datenstruktur in Java bereits, nennt sich ArrayList. Aber nachdem ihr ja den Stack selber implementieren sollt, wärs wohl Beschiss, den auf der ArrayList basieren zu lassen. Also notfalls die lieber auch selber machen, wobei dann ne stinknormale verkettete Liste deutlich einfacher sein sollte... Augenzwinkern )
donvito

wäre auch ein Array möglich, da bin ich mir nämlich wesentlich sicherer. Aber grad fällt mir ein Arrays gibts nicht mit objects, oder?
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen.