Behöver hjälp med java skoluppgift. Stack, Interfaces och Iterator.
Hej samtliga!
Jag är en som studerar till att få ut en kandidatexamen på Lnu i Kalmar, har tidigare läst ett program här som var riktat till att bli it/nätverkstekniker. De hade ett tillvalsår för att få ut en kandidatexamen i Datavetenskap dock p.g.a personalbrist etc så sitter jag nu med kurser i programmering och Java. Skulle behöva hjälp med den sista uppgiften jag har kvar i denna javakurs, antagligen mest förståelse av uppgiften.
Uppgiften följer nedan
En stack är en LiFo (Last-in, first-out) datastruktur med tre operationer: push, pop och peek. Push lägger in ett element överst på stacken, pop tar bort och returnerar det översta elementet, och peek returnerar (utan att ta bort) det översta elementet. Namnet "stack" kommer från engelskan och betyder "hög" eller "stapel". Stacken kan liknas med en tallriksstapel som kan påträffas i en skolbespisning eller lunchrestaurang. På stapeln kan man endast lägga en tallrik eller ta bort den översta – det går inte att ta bort en tallrik från mitten av stapeln. Er uppgift är att implementera följande Stack interface:
public interface Stack {
int size(); // Current stack size
boolean isEmpty(); // True if stack is empty
void push(Object element); // Add element at top of stack
Object pop(); // Return and remove top element
// exception if stack is empty.
Object peek(); // Return (without removing) top element,
// exception if stack is empty.
Iterator iterator(); // Element iterator
}
Iteratorn itererar över alla stackens element. Skriv också ett testprogram StackMain.java som visar hur alla metoder fungerar. Notera: Ni får inte använda några av de fördefinerade klasserna i Javas klassbibliotek. Ni får dock använda arrayer.
Det jag har gjort är att skapa 3 java klasser, Stack.java som innehåller interfacet som var fördefinierat.
StackImpl där jag implementerar samtliga av de abstrakta metoderna denna ser ut såhär just nu.
package test.stack
import java.util.EmptyStackException;
public class StackImpl< Object > implements Stack{
private Tallrik tallrikar;
private int size = 0;
StackImpl(){
tallrikar = null;
size = 0;
}
public int size() {
return size;
}
public boolean isEmpty() {
return ( size == 0 );
}
public Object pop() {
if(isEmpty()){
throw new EmptyStackException();
}
Object data = tallrikar.data;
tallrikar = (TallriksHoegTyp<Object>.Tallrik) tallrikar.next;
size --;
return data;
}
public Object peek() {
if(isEmpty()){
throw new EmptyStackException();
}
return tallrikar.data;
}
public Iterator iterator() {
for(int x=0;x<this.size;x++){
pop();
}
}
private class Tallrik{
protected Object data;
protected java.lang.Object next;
public Tallrik( Object element ){
this.data = element;
this.next = null;
}
}
public void push(Object element) {
Tallrik newTallrik = new Tallrik( element );
newTallrik.next = (Object) tallrikar;
tallrikar = newTallrik;
size++;
}
}
Samt den simpla StackMain.java som antagligen inte är så viktig i sammanhanget, där jag endast pushar två objekt (en string och en int), samt poppar den ena, då översta..
Då detta inte var en korrekt lösning av problemet, iterator är exempelvis inte implementerat alls, så har jag fått lite respons på vad som var fel.
Det är mest dessa jag behöver hjälp med att förstå.
Tanken är inte att din implementation av stack ska innehålla statiska metoder.
Din konstruktor saknar synlighet
Du ska inte använda en egen datatyp för att spara objekten, det är nämligen en länkad lista som gör det. En vanlig array används av typen Objekt.
iterator(): saknas. ex på hur den skall användas i main(): Iterator<Object> it = myStack.iterator(); och sedan skall hasNext() och next() användas.. iterator() -metoden returnerar alltså en instans av en Iterator-klass som ska skapas inuti Stack-klassen. Denna Iterator-klass implementerar ett interface i Java som heter Iterator.
Det jag antar från denna respons är att jag skall i min StackImpl klass ska ha en array som "klassvariabel(?)", och därmed använder jag inte någon egen datatyp utan använder en Object[] istället..
Och iterator, ingen aning om vad och hur jag skall börja på den. Har dock en aning om hur den skall användas senare i main(), då responsen innehöll detta men icke om hur den skall implementeras i antagligen StackImpl ...
Tack i förväg för samtliga som tar sig tid att åtminstone läsa mitt långa inlägg trots att jag skriver som en kratta...