为什么这会永远循环?

时间:2012-11-16 13:57:21

标签: loops

string confirm = "";

                    while (confirm != "y" || confirm != "n")
                    {
                        Console.Write("Remove {0}' account? (Y/N): ", Accounts[accountNumber].Name);
                        confirm = Console.ReadLine();
                        confirm = confirm.ToLower();
                    } 

由于某些未知原因,我的循环检查失败。即使确认IS为“n”或“y”,它仍然会再次循环。我甚至通过使用断点来检查它是否与“n”或“y”匹配。那么为什么每次检查都失败了呢?

4 个答案:

答案 0 :(得分:1)

while (confirm != "y" || confirm != "n")

当你的字符串是 NOT y或NOT n时,你会循环。如果是n,那么它不是y,反之亦然。你不能同时满足这两个条件!

你需要

 while (confirm != "y" && confirm != "n")

如果您的字符串不是yn,则会满意。

答案 1 :(得分:0)

因为您的字符串不能同时为yn。将||替换为&&

while (confirm != "y" && confirm != "n")

答案 2 :(得分:0)

这是一个错误的逻辑:如果例如确认是“y”,它不等于“n”,所以它将在你的循环中进入。

这样做:

while (!(confirm == "y" || confirm =="n")){
...
}

答案 3 :(得分:0)

DrOstler,

你的逻辑错了。

对我来说,如果你用二进制思考,我会有所帮助。

0 OR 0是唯一的假值,0 OR 1,1或1,1或0都是真的。 0或0意味着您或答案必须是y和n,这是不可能的。

您需要的是使用AND运算符(&&)或使用相等而不是否定。

while (confirm != "y" && confirm != "n")

只要答案既不是y也不是n,这只会循环。

OR

while (confirm == "y" || confirm == "n")

如果答案是y或n,则仅循环。

提示:谷歌摩根法律!