为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕容3067478 2021-11-17 10:31:54
编写一个方法来查找给定元素在堆栈中的位置,从堆栈顶部开始计数。更准确地说,如果元素出现在顶部,该方法应该返回 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}  }这是 ArrayClasspublic 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()的方法;虽然我确实实施了它。似乎是问题所在?
查看完整描述

1 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

您的 searchStack() 实现中有一个错误。如果您找到了您正在寻找的元素,并且它不是最顶层的元素,那么您就会丢失元素。

如何修复您的 searchStack() 方法:

  • 继续弹出 z 直到你有一个空的 ArrayStack。这样做时,将该值添加到队列中。

  • 创建 valIndex 并将其分配给 -1。

  • 然后遍历队列并从中删除项目并将它们添加到 z。这样做时,检查所需值的最后一次出现并将其保存在 valIndex 中。

  • 如果 valIndex 等于 -1,则返回它。否则,使用以下等式将其转换为正确的索引并返回:

    valIndex = (z.size - 1) - valIndex


查看完整回答
反对 回复 2021-11-17
  • 1 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信