为什么这会导致inf。环?

时间:2012-03-07 22:11:50

标签: c# loops while-loop

这段代码为客户端提供了一个ID,通过检查ID是否已被使用来连接到服务器,如果已经使用了ID,则检查下一个最高ID。由于某种原因,这导致了一个永无止境的循环为什么会这样?

        int IDcounter = 0;
        bool IDfound = false;
        bool IDused = false;
        while (!IDfound)
        {
            Console.WriteLine("Current ID check " + IDcounter);
            Console.WriteLine("Number of clients " + clientList.Count);
            foreach (Client id in clientList)
            {
                if (id.ID == IDcounter)
                {
                    IDused = true;
                    IDcounter++;
                    break;
                }
            }
            if (!IDused)
            {
                client.ID = IDcounter;
                IDfound = true;

            }

        }

        clientList.Add(client);

3 个答案:

答案 0 :(得分:6)

您需要在最终else声明中添加if

        if (!IDused)
        {
            client.ID = IDcounter;
            IDfound = true;

        }
        else
        {
            // Reset the IDUsed status
            IDUsed = false;
        }

考虑当您发现您检查的第一个ID由某个客户端获取时会发生什么。您将IDUsed设置为true,然后设置break循环。 if (!IDUsed)检查为false(因为ID 已使用),因此您重复此操作。但请注意,您从未将IDUsed设置回false。事实上,循环中没有任何地方发生,所以你永远循环。

答案 1 :(得分:1)

你忘记将Idused = false设置为循环

答案 2 :(得分:0)

如果你没有找到id,你只是打破了你的循环。如果找到id,则IDused为true,IDFound保持为false。