我无法启动此计划。我应该编写一个程序,通过向用户询问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");
}
}
答案 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);
}
}