为什么这些java行会进入无限循环

时间:2015-07-09 12:45:53

标签: java arrays loops arraylist smartfoxserver

我注意做一些arraylist操作,我遇到了一个问题,创造了一个无限循环。有人可以解释一下,为什么?

P.S。不要担心trace命令,我正在为smartfoxserver 2x实例创建自定义java扩展。

String deckOf4Array[] = new String[] {"AD","KD","QD","JD","10D","9D","8D","7D","6D","AH","KH","QH","JH","10H","9H","8H","7H","6H","AC","AS","KS"};
List<String> deckOf4List = new ArrayList<String>(Arrays.asList(deckOf4Array));

for(int n=0; n<4; n++)
{
    int cardindex = new Random().nextInt(deckOf4List.size()-1);
    trace("cardindex: " + cardindex);
    for (ListIterator<String> iter = deckOf4List.listIterator(); iter.hasNext(); )
    {
        // Here goes infinite loop
        trace("cardindex: " + cardindex);

        if(cardindex == iter.nextIndex())
        {
            // Here goes manipulations
        }
        iter.remove();
    }
}

2 个答案:

答案 0 :(得分:1)

您必须编辑for循环...

for (ListIterator<String> iter = deckOf4List.listIterator(); iter.hasNext(); iter.next())

nextIndex()方法返回即将发生的索引,但是,它不会在迭代中移动光标。因此,如果将iter.next()放入for循环中,它实际上会移动光标。在你的情况下,你没有移动光标,所以你继续迭代索引0。

至于official documentation ...

next() - 返回列表中的下一个元素并前进光标位置。

int nextIndex() - 返回后续调用next()返回的元素的索引。

答案 1 :(得分:0)

我认为因为你需要调用.nextIndex()实际上将迭代器移动到下一个索引。 {{1}}只显示下一个索引。