2012-09-19 55 views
0

代碼列表中的項目:使用的ListIterator

Random Picker = new Random(); 
List<String> list = new ArrayList<String>(); 
    list.add("card1"); 
    list.add("card2"); 
    list.add("card3"); 


    ListIterator listIterator = list.listIterator(); 
    String c1, c2, c3; 
    c1 = list.get(Picker.nextInt(list.size())); 
    listIterator.remove(); 

做這件事時,我得到一個Java錯誤。我想要做的是將c1設置爲list.get(Picker.nextInt(list.size())); ,然後從列表中移除拾取的卡片。換句話說,我希望字符串c1從列表中隨機選取,然後將其選中的卡從列表中移除,但要保留在值c1中。我會想象我目前的代碼不起作用,因爲當我刪除它選擇的內容時,它也會從字符串c1中刪除該卡。我不知道如何正確地做到這一點。

+0

什麼錯誤? – kosa

+0

謝謝,我是java新手。無論我如何做,我基本上都在努力做的事情是將c1設置爲列表中的一個隨機字符串,然後從列表中刪除該字符串,但將c1保留爲選取的字符串。換句話說,讓我說在我的列表中,其中一個選中的字符串表示「hi」 - c1將設置爲「hi」,然後字符串「hi」將從列表中移除,但c1仍將設置爲它。 – User093203920

回答

1

您沒有使用迭代器從集合中刪除元素。您正在調用剛從實例化的迭代器中移除。如果你看一下ListIterator文檔,你會認爲本身remove

此調用只能進行每次調用一次,下一個或上。只有在最後一次調用next或previous之後尚未調用ListIterator.add時纔可以進行此操作。

這意味着,如果迭代器沒有調用next()來獲取第一個元素,您仍然處於非法狀態。

在任何情況下都不需要使用迭代器。從List<E>remove(int index)方法將這樣的伎倆:

String c1 = list.remove(rand.nextInt(list.size)); 
1

我與傑克同意。另外,你可以用Collections.shuffle(list)替代Random。顧名思義,它會隨機化你的名單。使用你的listIterator,你可以遍歷列表並挑選你的卡片,將它們存儲在另一個列表中。它看起來是這樣的:

List<String> list = new ArrayList<String>(); 
list.add("card1"); 
list.add("card2"); 
list.add("card3"); 

Collections.shuffle(list); 

ListIterator<String> listIterator = list.listIterator(); 
List<String> pickedCards = new ArrayList<String>(); 

while(listIterator.hasNext()) { 
    pickedCards.add(listIterator.next()); 
} 

String c1 = pickedCards.get(0); 
String c2 = pickedCards.get(1); 
String c3 = pickedCards.get(2); 

C1,C2的值,和C3現在會是這樣的"card2""card1""card3"

相關問題