我的java方法代码有什么问题? - 堆栈

时间:2013-02-22 16:44:51

标签: java methods iterator stack peek

我花了最后几个小时创建了一个方法,它将从堆栈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()方法。我的理解是这些方法是继承的吗?非常感谢任何帮助!

3 个答案:

答案 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()执行相同的功能。