为什么这些 java 行进入无限循环
Why these java lines goes to an infinite loop
我需要做一些数组列表操作,但我 运行 遇到了一个问题,创建了一个无限循环。有人可以解释一下为什么吗?
p.s。不用担心跟踪命令,我正在为 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();
}
}
我认为是因为您需要调用 deckOf4List.next()
,这实际上将迭代器移动到下一个索引。 .nextIndex()
只是显示下一个索引。
您必须编辑您的 for 循环...
for (ListIterator<String> iter = deckOf4List.listIterator(); iter.hasNext(); iter.next())
nextIndex() 方法 returns 即将到来的索引,但是,它不会在您的迭代中移动光标。所以如果你把 iter.next()
放在你的 for 循环中,它实际上会移动光标。在你的例子中,你没有移动光标,所以你继续迭代索引 0.
next()
-
Returns 列表中的下一个元素并前进光标位置。
int nextIndex()
-
Returns 将由后续调用 next() 返回的元素的索引。
我需要做一些数组列表操作,但我 运行 遇到了一个问题,创建了一个无限循环。有人可以解释一下为什么吗?
p.s。不用担心跟踪命令,我正在为 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();
}
}
我认为是因为您需要调用 deckOf4List.next()
,这实际上将迭代器移动到下一个索引。 .nextIndex()
只是显示下一个索引。
您必须编辑您的 for 循环...
for (ListIterator<String> iter = deckOf4List.listIterator(); iter.hasNext(); iter.next())
nextIndex() 方法 returns 即将到来的索引,但是,它不会在您的迭代中移动光标。所以如果你把 iter.next()
放在你的 for 循环中,它实际上会移动光标。在你的例子中,你没有移动光标,所以你继续迭代索引 0.
next()
-
Returns 列表中的下一个元素并前进光标位置。
int nextIndex()
-
Returns 将由后续调用 next() 返回的元素的索引。