我花了最后几个小时创建了一个方法,它将从堆栈s1中取出null元素,并将它们放入s2中。然后该类应该打印堆栈。方法如下
import net.datastructures.ArrayStack;
import net.datastructures.Stack;
import javax.imageio.IIOException;
public class Stacks {
public static <E> void compress(Stack<E> s1, Stack<E> s2) {
int counter = 0;
while (!s1.isEmpty()) {
s1.peek();
if (s1.peek() == null) {
s1.pop();
} else if (s1.peek() == !null) {
s1.pop();
s2.push();
counter++;
}
for (counter=10;counter>s1.size(); counter--){
}
s2.pop();
s1.push();
}
}
public static void main(String[] args) {
// test method compress
Stack<Integer> S1 = new ArrayStack<Integer>(10);
S1.push(2);
S1.push(null);
S1.push(null);
S1.push(4);
S1.push(6);
S1.push(null);
Stack<Integer> s2 = new ArrayStack<Integer>(10);
s2.push(7);
s2.push(9);
System.out.println("stack S1: " + S1);
// prints: "stack S: [2, null, null, 4, 6, null]"
System.out.println("stack s2: " + s2);
// prints: "stack X: [7, 9]"
compress(S1, s2);
System.out.println("stack S1: " + S1);
// should print: "stack S: [2, 4, 6]"
System.out.println("stack s2: " + s2);
// should print: "stack X: [7, 9]"
}
}
Eclipse给了我peek()和push()方法的错误;它允许pop()方法。我的理解是这些方法是继承的吗?非常感谢任何帮助!
答案 0 :(得分:4)
else if (s1.peek() == !null)
这是不正确的。使用此:
else if (s1.peek() != null)
答案 1 :(得分:1)
此:
if (s1.peek() == null) {
s1.pop();
} else if (s1.top() == !null) {
s1.pop();
s2.push();
counter++;
}
应该是:
if (s1.top() == null) {
s1.pop();
} else {
s2.push(s1.pop());
counter++;
}
您无需仔细检查s1.peek()
不为空。另外,!null
不是正确的语法。
我将我的回答编辑为使用top()
代替peek()
,将pop()
s1
修改为s2
。
答案 2 :(得分:1)
除了比较错误之外,还有一些语法错误:
push()
需要一个参数:你在推动什么堆栈?即使它是null
,它仍然需要s1.push(null)
。如果这是你pop()
的结果,你需要将pop()
的结果分配给某个东西 - 现在它已经丢失了。
您正在使用的对象(net.datastructures.Stack)没有peek()
方法;相反它有top()
执行相同的功能。