2012-09-19 53 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"

相关问题