编写一个方法来查找给定元素在堆栈中的位置,从堆栈顶部开始计数。更准确地说,如果元素出现在顶部,该方法应该返回 0,如果它上面有另一个元素,则返回 1,依此类推。如果元素出现多次,则应返回最上面的位置。如果元素根本没有出现,则必须返回 -1。要求您以两种不同的方式编写此方法;一种方法是在 ArrayStack 类内部实现它,另一种方法是在单独的类中外部实现它。重要提示:最后堆栈应返回到原始状态(即不应删除任何元素且不应更改元素的顺序)。
这是外部类
public class Stack{
public static int searchstack(ArrayStack z, int n) {
ArrayStack temp = new ArrayStack(z.size());
int c = 0;
boolean flag = false;
while (!z.isEmpty()) {
if (z.top() == n) {
flag = true;
return c;
}
if (z.top() != n) {
temp.push(z.pop());
c++;
flag = false;
}
}
if (flag == false) {
c = -1;
}
while (!temp.isEmpty() && !z.isFull()) {
z.push(temp.pop());
}
return c;
}
public static void main(String[] args) {
ArrayStack z = new ArrayStack(4);
z.push(3); // first element
z.push(7);// 2nd
z.push(8);// 3rd
z.push(1);// 4th
z.printStack();
int n = 3;
System.out.println("Searching externally for" + " " + n + " " + searchstack(z, n));
System.out.println("Searching internally for" +" "+n+" "+ z.searchfor(n)+" "); //THE ERROR IS HERE
}
}
这是 ArrayClass
public class ArrayStack {
private int[] theStack;
private int maxSize;
private int top;
public ArrayStack(int s) {
maxSize = s;
theStack = new int[maxSize];
top = -1;
}
public void push(int elem) {
top++;
theStack[top] = elem;
}
public int pop() {
int result = theStack[top];
top--;
return result;
}
public int top() {
return theStack[top];
}
public boolean isFull() {
return (top == (maxSize - 1));
}
public boolean isEmpty() {
return (top == -1);
}
Stack类出现的错误是在调用Arraystack类中实现的searchfor方法的最后一行,error表示Arraystack中没有实现名为searchfor()的方法;虽然我确实实施了它。似乎是问题所在?
ITMISS
相关分类