Hallo,
ich habe eine Aufgabe, bei der ich Stacks programmieren soll.
Beim Testen haben die Methoden pop() und swap() nicht funktioniert. Selbst nach dem Debuggen, hab ich den Fehler nicht rausbekommen.
Hier sind zusammengefasst all meine Fragen.
1. Warum funktioniert die Methode pop() nicht?
2. Warum funktioniert die Methode swap() nicht?
3. Warum meldet der Compiler einen Fehler, wenn ich diese Zeile hinschreibe: stack[card-1]=null; ?
4. In der Musterlösung steht für die Funktion pop folgender Code: public double pop () { return elems[−−top]; }
a) Was wird hier gemacht? Das Element elems[top+1] wurde doch nicht gelöscht. Es wurde nur die Kardinalität um eins verringert. Aber das Element steht trotzdem drin.
5. Warum konnte ich in der Klasse VerboseStack, die Methoden pop() und push() nicht so definieren: public void push()/public void pop()?
ich habe eine Aufgabe, bei der ich Stacks programmieren soll.
Beim Testen haben die Methoden pop() und swap() nicht funktioniert. Selbst nach dem Debuggen, hab ich den Fehler nicht rausbekommen.
Hier sind zusammengefasst all meine Fragen.
1. Warum funktioniert die Methode pop() nicht?
2. Warum funktioniert die Methode swap() nicht?
3. Warum meldet der Compiler einen Fehler, wenn ich diese Zeile hinschreibe: stack[card-1]=null; ?
4. In der Musterlösung steht für die Funktion pop folgender Code: public double pop () { return elems[−−top]; }
a) Was wird hier gemacht? Das Element elems[top+1] wurde doch nicht gelöscht. Es wurde nur die Kardinalität um eins verringert. Aber das Element steht trotzdem drin.
5. Warum konnte ich in der Klasse VerboseStack, die Methoden pop() und push() nicht so definieren: public void push()/public void pop()?
Java:
public class Stack {
protected int size;
protected int card; //Anzahl der tatsächlichen Elemente
protected double[] stack;
public Stack(int n){
stack=new double[n];
size=n;
}
public boolean push(double x){
if(card<size){
stack[card]=x;
card++;
return true;
}
return false;
}
public double pop(){
double tmp=stack[card-1];
//stack[card-1]=null; Warum funktioniert das nicht?
card--;
return tmp;
}
public boolean swap(){
if(card<2){
return false;
}
double tmp1=pop();
double tmp2=pop();
push(tmp1);
push(tmp2);
return true;
}
public String toString(){
String s="";
if(card==0){
return s;
}
s+=stack[0];
for(int i=1;i<card;i++){
s+=", "+stack[i];
}
return s;
}
}
Java:
public class DecreasingStack extends Stack {
public DecreasingStack(int n){
super(n);
}
// Nur das oberste Element muss überprüft werden
public boolean push(double x){
if(card<size && x<stack[--card]){
stack[card]=x;
card++;
return true;
}
return false;
}
public boolean swap(){
return false;
}
}
Java:
public class VerboseStack extends Stack{
//final?
static int number=0;
public VerboseStack(int n){
super(n);
number++;
}
public boolean push(double x){ //Geht auch public void push() ?
if(!super.push(x)){
return false;
}
System.out.print("Stack no. "+number+": "+"push "+x);
return true;
}
public double pop(){ //Geht auch public void pop() ?
double x=super.pop();
System.out.println("Stack no. "+number+": "+"pop "+x);
return x;
}
}
Java:
public class StackTest {
public static void main(String[] args) {
Stack s =new Stack(4);
s.push(3.3);
s.push(3.1);
s.push(3.3);
s.push(5.7);
s.swap();
System.out.println(s.toString());
s.pop();
System.out.println(s.toString());
}
}