0

我注意做一些数组列表操作,但我遇到了一个问题,创建了一个无限循环。有人可以解释一下为什么吗?

ps 不要担心跟踪命令,我正在为 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();
    }
}
4

2 回答 2

1

你必须编辑你的 for 循环......

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

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

至于官方文档...

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

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

于 2015-07-09T12:52:37.407 回答
0

我认为是因为您需要调用deckOf4List.next()which 实际上将迭代器移动到下一个索引。.nextIndex()只是显示下一个索引。

于 2015-07-09T12:49:51.010 回答