2012-03-07 161 views
0

这部分代码给出了一个客户端,它通过检查ID是否已被使用或未被使用,然后检查下一个最高ID来连接到服务器的ID。出于某种原因,这导致了一个永无止境的循环,为什么呢?为什么这会导致inf。循环?

 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

“IDcounter”分配在哪里? – 2012-03-07 22:13:05

+0

对不起,对于IDfound,编辑错误 – user1255805 2012-03-07 22:13:51

+2

如果这是分配一个标识符用作数据库密钥,这不是一个好主意。 – 2012-03-07 22:17:00

回答

6

你需要一个else添加到最终if声明:

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

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

考虑一下,当你发现你检查的第一个ID是采取一些客户会发生什么。您将IDUsed设置为true,然后设置break循环。 if (!IDUsed)检查是错误的(因为ID 使用了),因此您重复。但请注意,您从未将IDUsed设置回false。事实上,在循环中没有任何事情发生,所以你永远循环。

+0

+1虽然我认为你的意思是'IDused'而不是'IDUser' – 2012-03-07 22:18:36

+0

@ M.Babcock Yep,编辑。 – dlev 2012-03-07 22:19:56

+0

Omg我觉得自己像一个白痴大声笑,谢谢你的帮助生病接受4分钟后的答案 – user1255805 2012-03-07 22:22:53

0

如果你没有找到id,那么你只有摆脱你的循环。如果你确实找到了id,那么IDused是真实的,IDFound保持不真实。

1

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

相关问题