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

Informatiker Board » Themengebiete » Praktische Informatik » Stack / Java / Konstruktor » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Stack / Java / Konstruktor
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
donvito donvito ist weiblich
Mitglied


images/avatars/avatar-3.jpg

Dabei seit: 04.01.2007
Beiträge: 41
Herkunft: Freiburg

Stack / Java / Konstruktor Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,

ich soll in Informatik in Java eine Klasse Stack schreiben (obwohl diese in Java bereits implementiert ist). Kann mir einer erklären, wie ich das anstelle? Sie muss ja wohl eine Variable des Typs Object enthalten, aber was muss da sonst noch rein? Mein Problem ist besonders der Konstruktor und die Variablen. Die restlichen Methoden (Anhängen, Abrufen, Löschen) sind soweit klar.

Ich hoffe meine Frage ist verständlich.

__________________
Meine Moviebase
18.01.2007 21:04 donvito ist offline E-Mail an donvito senden Homepage von donvito Beiträge von donvito suchen Nehmen Sie donvito in Ihre Freundesliste auf
Crotaphytus
Mitglied


Dabei seit: 18.09.2006
Beiträge: 45

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Wo genau steckt das Problem? Der Konstruktor muss ja nicht viel mehr machen als einen leeren Stack anlegen... Mach dir lieber Gedanken, wie die Datenstruktur an sich aussieht. Nur mit einer Variablen des Typs Object wirst du nämlich nicht weit kommen - dann könnte der Stack nur ein Element enthalten...

Davon mal abgesehen... Programmiert ihr in Java 5? Und hast du schon was von Generics gehört? Denn wenn ja, dann kannst du dir das mit dem Object schenken... Augenzwinkern

__________________
Das ist keine Signatur.
18.01.2007 21:15 Crotaphytus ist offline E-Mail an Crotaphytus senden Beiträge von Crotaphytus suchen Nehmen Sie Crotaphytus in Ihre Freundesliste auf Fügen Sie Crotaphytus in Ihre Kontaktliste ein
Tobias
Routinier


Dabei seit: 18.09.2006
Beiträge: 324

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ein Stack ist nichts anderes als eine Last-In-First-Out Warteschlange mit den Operationen isEmpty, clear, push, pop. Die Warteschlange kann man z.B. durch eine verkettete Liste darstellen.

Ich würde ebenfalls Generics benutzen. Das führt zu folgender Klassendefinition:

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:
public class Stack<E> {

   public Stack() {
     // erstelle leeren Stack hier
   }	

   public void push(E elem) {
      // Element elem mit Datentyp E auf Stack setzen
   }

   public E pop() {
      // oberstes Element zurückgeben
   }

   public void clear() {
      // Stack leeren
   }

   public boolean isEmpty() {
      // ist Stack leer?
   }
	
}



Man erstellt dann eine Instanz der Klasse durch z.B.
code:
1:
2:
3:
4:
5:
6:
  Stack<Integer> myStack = new Stack<Integer>();
  
  myStack.push(new Integer(1));

19.01.2007 01:19 Tobias ist offline E-Mail an Tobias senden Beiträge von Tobias suchen Nehmen Sie Tobias in Ihre Freundesliste auf
donvito donvito ist weiblich
Mitglied


images/avatars/avatar-3.jpg

Dabei seit: 04.01.2007
Beiträge: 41
Herkunft: Freiburg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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?

__________________
Meine Moviebase
19.01.2007 08:31 donvito ist offline E-Mail an donvito senden Homepage von donvito Beiträge von donvito suchen Nehmen Sie donvito in Ihre Freundesliste auf
Crotaphytus
Mitglied


Dabei seit: 18.09.2006
Beiträge: 45

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 )

__________________
Das ist keine Signatur.
19.01.2007 16:51 Crotaphytus ist offline E-Mail an Crotaphytus senden Beiträge von Crotaphytus suchen Nehmen Sie Crotaphytus in Ihre Freundesliste auf Fügen Sie Crotaphytus in Ihre Kontaktliste ein
ed209
Routinier


Dabei seit: 07.09.2006
Beiträge: 324

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
20.01.2007 17:32 ed209 ist offline E-Mail an ed209 senden Beiträge von ed209 suchen Nehmen Sie ed209 in Ihre Freundesliste auf
donvito donvito ist weiblich
Mitglied


images/avatars/avatar-3.jpg

Dabei seit: 04.01.2007
Beiträge: 41
Herkunft: Freiburg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.

__________________
Meine Moviebase

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von donvito: 20.01.2007 18:19.

20.01.2007 18:13 donvito ist offline E-Mail an donvito senden Homepage von donvito Beiträge von donvito suchen Nehmen Sie donvito in Ihre Freundesliste auf
Crotaphytus
Mitglied


Dabei seit: 18.09.2006
Beiträge: 45

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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...

__________________
Das ist keine Signatur.
20.01.2007 23:53 Crotaphytus ist offline E-Mail an Crotaphytus senden Beiträge von Crotaphytus suchen Nehmen Sie Crotaphytus in Ihre Freundesliste auf Fügen Sie Crotaphytus in Ihre Kontaktliste ein
donvito donvito ist weiblich
Mitglied


images/avatars/avatar-3.jpg

Dabei seit: 04.01.2007
Beiträge: 41
Herkunft: Freiburg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

__________________
Meine Moviebase
21.01.2007 00:03 donvito ist offline E-Mail an donvito senden Homepage von donvito Beiträge von donvito suchen Nehmen Sie donvito in Ihre Freundesliste auf
ed209
Routinier


Dabei seit: 07.09.2006
Beiträge: 324

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.
21.01.2007 00:48 ed209 ist offline E-Mail an ed209 senden Beiträge von ed209 suchen Nehmen Sie ed209 in Ihre Freundesliste auf
Tobias
Routinier


Dabei seit: 18.09.2006
Beiträge: 324

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Tobias: 21.01.2007 03:36.

21.01.2007 03:20 Tobias ist offline E-Mail an Tobias senden Beiträge von Tobias suchen Nehmen Sie Tobias in Ihre Freundesliste auf
donvito donvito ist weiblich
Mitglied


images/avatars/avatar-3.jpg

Dabei seit: 04.01.2007
Beiträge: 41
Herkunft: Freiburg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

__________________
Meine Moviebase
21.01.2007 11:03 donvito ist offline E-Mail an donvito senden Homepage von donvito Beiträge von donvito suchen Nehmen Sie donvito in Ihre Freundesliste auf
Tobias
Routinier


Dabei seit: 18.09.2006
Beiträge: 324

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.
21.01.2007 14:32 Tobias ist offline E-Mail an Tobias senden Beiträge von Tobias suchen Nehmen Sie Tobias in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Stack / Java / Konstruktor