这段代码为客户端提供了一个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);
答案 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。