我的代码有什么问题,我正在尝试使用内部和外部方法在堆栈中搜索

编写一个方法来查找给定元素在堆栈中的位置,从堆栈顶部开始计数。更准确地说,如果元素出现在顶部,该方法应该返回 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()的方法;虽然我确实实施了它。似乎是问题所在?


慕容3067478
浏览 111回答 1
1回答

ITMISS

您的 searchStack() 实现中有一个错误。如果您找到了您正在寻找的元素,并且它不是最顶层的元素,那么您就会丢失元素。如何修复您的 searchStack() 方法:继续弹出 z 直到你有一个空的 ArrayStack。这样做时,将该值添加到队列中。创建 valIndex 并将其分配给 -1。然后遍历队列并从中删除项目并将它们添加到 z。这样做时,检查所需值的最后一次出现并将其保存在 valIndex 中。如果 valIndex 等于 -1,则返回它。否则,使用以下等式将其转换为正确的索引并返回:valIndex = (z.size - 1) - valIndex
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java