2011-02-26 39 views
2

我在启动这个程序时遇到了麻烦。我应该编写一个程序,通过询问用户10个数字来填充ArrayList需要ArrayList和Stack的帮助

列表完成后,我要导航它,如果某个数字是偶数,请将其从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"); 
    } 
} 
+0

您遇到了什么问题? – hvgotcodes

+2

无关,但因为这是作业,我会添加此评论。养成编码接口的习惯是个好主意。因此,不是声明ArrayList test = new ArrayList(),而是使用List test = new ArrayList()。对接口进行编码为您提供更大的灵活性,当需要改变实现时。 – Marvo

回答

2

看来你只需要初始化堆栈。对初始化测试数组的堆进行初始化。

将这个:

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

后:

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

编辑 - 我感觉大方,所以我做完了雅)你实际上几乎所有的方式出现,所以我不要觉得我真的剥夺了你的学习机会。你唯一缺少的其他东西是初始化迭代器并正确使用它。

注意以下几点:

- 你会看到,如果你使用了迭代器,你可以摆脱的for循环。
- 我更改了变量的名称,使它们更容易跟随命名,这很重要。
- 最后,由于ArrayList ISA列表,您会注意到我更改了输入值的声明以使用声明的接口。

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); 
    } 
} 
+0

好吧我这样做,但不会让找到符号为myiterator – helloman

+0

@helloman,编辑我的回答 – hvgotcodes

+0

您的代码还有许多其他错误,我建议您开始阅读我的答案一些线索,然后再次阅读您的文档,我当然,有很多关于如何做正确的事情的例子;) – krtek

0

提示:注释掉的代码有一个声明和初始化适合您的目的的堆栈。它需要在将代码推入堆栈的代码之前。

0

我真的怀疑你的代码编译没有修改。例如myListIterator和myStack甚至没有声明,我不记得java Iterator有一个getNext()方法。

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

看着你的问题的标签,这似乎是一些一种家庭作业,我确定文档解释了所有这些步骤。

而且,由于你使用的ListIterator移除从ArrayList中的整数,就没有必要使用一个for循环,你可以这样做

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