2011-02-26 79 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); 
    } 
}