给出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;
}
谢谢!
答案 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
如果堆栈中的任何一个为空,此方法也将注意。