检查两个堆栈是否相等的方法

时间:2013-05-31 19:52:28

标签: java stack

给出ArrayStack的以下类定义:

Public class ArrayStack<T> implements Stack {

    T[] stack;
    int topIndex = -1;

在类ArrayStack中写一个方法equals(Stack other),它接受一个Stack作为参数,如果两个堆栈相等则返回true,否则返回false。

    public boolean equals(Stack<T> other) {

ArrayStack.java的代码

    import java.util.Arrays;
    import java.util.EmptyStackException;

    public class ArrayStack<T> implements Stacks<T> {

      T[] stack;
      int topIndex = -1;
      private final static int DEFCAP = 100;

      public ArrayStack(int maxSize) {
        stack = (T[]) new Object[maxSize];
      }

      public ArrayStack() {
        this(DEFCAP);
      }

      @Override
      public void push(T element) {
        if (topIndex == stack.length - 1) {
          enlarge();
        }
        topIndex++;
        stack[topIndex] = element;
      }

      @Override
      public T pop() {
        return stack[topIndex--];
      }

      @Override
      public boolean isEmpty() {
        return topIndex == -1;
      }

      @Override
      public  T peak() {
        if (!isEmpty()) {
          return stack[topIndex];
        } else {
          throw new EmptyStackException();
        }
      }

      private void enlarge() {
        stack = Arrays.copyOf(stack, stack.length + DEFCAP);
      }
    }

我的尝试:我对我的尝试有多糟糕感到非常生气但是我现在太封闭了,我无法正确思考。在思考这个问题时需要你的帮助!

public boolean equals(Stack<T> other) {
    if(! other.isEmpty() ) {
        for(int i=0; i < stack.length; i++) {
            if(stack[i].equals(Other.stack[i]) ) {
                return true;
            }
        }
    }

    return false;
}

谢谢!

3 个答案:

答案 0 :(得分:4)

public boolean equals(Stack<T> other) {
    //If they point to the same object return true
    if (stack == other) return true;
    //Check for nulls
    if (stack == null || other == null) return false;
    //If the stacks are not the same length, then they won't be equal, easy first test case
    if (stack.length != other.size()) return false;

    for(int i=0; i < stack.length; i++) {
           //Step through each item in both stacks, if any don't match return false
           if(!stack[i].equals(other.stack[i]) ) {
                  return false;
           }
    }

    //Haven't returned yet, they must be equal
    return true;
}

答案 1 :(得分:0)

你的平等实施是不正确的。如果只有一个元素匹配,则返回true。这意味着,当所有条目一对一不匹配时,唯一会出现错误的时间。

你要找的是返回false,如果任何相应的元素不匹配,并在运行循环结束时返回true。

如果两个堆栈的大小不同,您还必须返回false。

答案 2 :(得分:0)

您可以在Java中使用String.valueOf()方法,该方法将不同类型的值转换为字符串。

如果s和t是两个堆栈对象

String a = String.valueOf(s);
String b= String.valueOf(t);

return a.equals(b); // will return true if stacks are equal 

如果堆栈中的任何一个为空,此方法也将注意。