donvito
Mitglied
Dabei seit: 04.01.2007
Beiträge: 41
Herkunft: Freiburg
|
|
Stack / Java / Konstruktor |
|
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 |
|
|
Crotaphytus
Mitglied
Dabei seit: 18.09.2006
Beiträge: 45
|
|
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...
__________________ Das ist keine Signatur.
|
|
18.01.2007 21:15 |
|
|
Tobias
Routinier
Dabei seit: 18.09.2006
Beiträge: 324
|
|
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 |
|
|
donvito
Mitglied
Dabei seit: 04.01.2007
Beiträge: 41
Herkunft: Freiburg
|
|
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 |
|
|
Crotaphytus
Mitglied
Dabei seit: 18.09.2006
Beiträge: 45
|
|
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...
)
__________________ Das ist keine Signatur.
|
|
19.01.2007 16:51 |
|
|
ed209
Routinier
Dabei seit: 07.09.2006
Beiträge: 324
|
|
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 |
|
|
Crotaphytus
Mitglied
Dabei seit: 18.09.2006
Beiträge: 45
|
|
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 |
|
|
donvito
Mitglied
Dabei seit: 04.01.2007
Beiträge: 41
Herkunft: Freiburg
|
|
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 |
|
|
|
ed209
Routinier
Dabei seit: 07.09.2006
Beiträge: 324
|
|
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 |
|
|
donvito
Mitglied
Dabei seit: 04.01.2007
Beiträge: 41
Herkunft: Freiburg
|
|
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 |
|
|
Tobias
Routinier
Dabei seit: 18.09.2006
Beiträge: 324
|
|
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 |
|
|
|
|
|