需要帮助ArrayList和Stack please

时间:2011-02-26 01:17:13

标签: java

我无法启动此计划。我应该编写一个程序,通过向用户询问10个数字来填充ArrayList

列表生成后我要导航它,如果数字是偶数,请从ArrayList中删除它,并将数字加到Stack整数。到目前为止,我有这个,但我对如何启动堆栈感到困惑,以便我可以将偶数放入其中:

import java.io.* ;
import java.util.*;

public class Test {
    public static void main(String[] args) {
        Scanner input = new Scanner (System.in);

        ArrayList<Integer> test = new ArrayList<Integer>();
        Stack<Integer> myStack = new Stack<Integer>();

        System.out.print ("Enter Number: \n");

        for (int i = 0; i < 10; i++) {          //Put Into ArrayList
            test.add(input.nextInt());
        }

        System.out.print("Contents of Array: " +  test );
        System.out.print("\n");

        for (int i= 0; i < 10 ; i++) {
            int item = myIterator.getNext();
            if (item % 2 == 0) {
                myListIterator.remove(); //removes it from the ArrayList
                myStack.push(item); //puts it into the stack
            }

        }

        System.out.print("Contents of Array afer numbers removed: " +  test );
        System.out.print("\n");
    }
}

3 个答案:

答案 0 :(得分:2)

看起来你只需要初始化堆栈。在初始化测试数组的位置初始化堆栈。

把这个:

 Stack<Integer> item = new Stack <Integer> ();

后:

ArrayList<Integer> test = new ArrayList<Integer>();
编辑 - 我感觉很慷慨,所以我为你完成了;)你实际上几乎都在那里,所以我不觉得我真的剥夺了你的学习机会。你唯一缺少的另一个真正的东西是初始化迭代器并正确使用它。

请注意以下事项:

- 你会看到如果你使用迭代器,你可以摆脱for循环 - 我更改了变量的名称,因此它们更易于遵循 - 命名很重要 - 最后,从ArrayList ISA List开始,您会注意到我更改了输入值的声明以使用接口进行声明。

import java.util.*;

public class Test {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        List<Integer> inputValues = new ArrayList<Integer>();
        Stack<Integer> evens = new Stack <Integer> ();

        System.out.print("Enter Number: \n");

        for (int i = 0; i < 10; i++) {           //Put Into ArrayList
            inputValues.add(input.nextInt());
        }

        System.out.println("Contents of Array: " + inputValues);

        Iterator<Integer> iter = inputValues.iterator();

        while(iter.hasNext()) {
            Integer currentVal = iter.next();
            if (currentVal % 2 == 0) {
                iter.remove(); //removes it from the ArrayList
                evens.push(currentVal); //puts it into the stack
            } else {
                System.out.println("No");
            }


        }

        System.out.println("List values " + inputValues);
        System.out.println("Stack values " + evens);
    }
}

答案 1 :(得分:0)

提示:注释掉的代码具有适合您的目的的堆栈声明和初始化。它需要在将内容推送到堆栈的代码之前。

答案 2 :(得分:0)

我真的怀疑你的代码是在没有修改的情况下编译的。例如myListIterator和myStack甚至都没有声明,我不记得java Iterators有getNext()方法。

在使用变量之前,必须首先声明它并对其进行初始化,这些操作可以在一行中完成,例如:Stack<Integer> myStack = new Stack<Integer>();

查看问题的标签,这似乎是某种功课,我确信文档解释了所有这些步骤。

由于您使用ListIterator从ArrayList中删除Integer,因此无需使用for循环,您可以执行类似

的操作
while(myListIterator.hasNext()) {
    Integer item = myListIterator.next();
    if(item % 2 == 0) {
        item.remove();
        myStack.add(item);
    }
}