如何保持内在的while循环无限运行?问题是没有外部while循环,内部循环将运行没有问题。我知道它必须对外循环做一些事情,但我无法弄清楚导致问题的原因。
import java.util.LinkedList;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class Tester
{
static LinkedList<String> list1 = new LinkedList<String>();
static LinkedList<String> list2 = new LinkedList<String>();
private static void stringMethod()
{
Set<String> stringSet = new HashSet<String>();
Random random = new Random();
String flashCard ="";
int rand;
while (!list2.isEmpty()) {
if (list2.size() != 1) {
flashCard = list2.remove(random.nextInt(list2.size() - 1));
} else {
flashCard = list2.remove(0);
}
stringSet.add(flashCard);
while (stringSet.size() != 4) {
rand = random.nextInt(list1.size());
stringSet.add(list1.get(rand));
}
}
}
public static void main(String[] args)
{
for (int i = 0 ; i < 5; i++) {
list1.add("String " + i);
}
list2.addAll(list1);
stringMethod();
}
}
答案 0 :(得分:4)
好吧,一旦Set的大小达到5,内部循环将永远不会终止。list1
有5个元素,所以最终所有元素都会被添加到stringSet
。很难看出你在这里想做什么,所以我不能建议如何解决它。
更改
while (stringSet.size() != 4)
到
while (stringSet.size() < 4)
将阻止无限循环,但我不确定这是否是所需的逻辑。
答案 1 :(得分:3)
问题在于你的while循环条件
while (stringSet.size() != 4)
一旦你的stringSet大小为4,你将打破这个循环,但下次它进入无限循环,因为你在内部while循环之前将元素添加到stringSet
并且它的大小变为5并且它永远不会破裂。
您可能想要使用
while (stringSet.size() <= 4)
这将阻止你进入无限循环,但我确信这是你想要做的。