内部循环永远不会完成

时间:2015-07-23 18:41:08

标签: java

如何保持内在的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();
    }
}

2 个答案:

答案 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) 

这将阻止你进入无限循环,但我确信这是你想要做的。