Do While循环行为很奇怪(对我来说)。谁能解释一下?

时间:2013-12-29 08:22:43

标签: c# do-while

我通常做Java编程,但想用C#测试我的运气,看看它是什么样的。我不是一个新手程序员,所以也许这很愚蠢,但在我的Do-While循环中,为什​​么它只有在我使用&&而不是||当试图终止我的循环?对我来说,在Java中,||将被使用,因为你想要一个大写或小写“q”来终止。我正在读取终止为“Q”和“q”。显然情况并非如此,因为循环终止就好了。我只是不明白这是如何工作的。

namespace Testing_Grounds
{
    class Program
    {
        static void Main(string[] args)
        {
            string entry;

            do
            {
                Console.WriteLine("This is an inventory screen");
                Console.WriteLine("1. Health Potions");
                Console.WriteLine("2. Mana Potions");
                Console.WriteLine("3. Revive Potions");
                Console.Write("Please enter the number of the item " +
                    "you would like to inspect, or enter \"Q\" to quit: ");
                entry = Console.ReadLine();

                if (entry.Equals("1"))
                {
                    Console.WriteLine("Health Potions");
                }
                else if (entry.Equals("2"))
                {
                    Console.WriteLine("Mana Potions");
                }
            } while (entry != "Q" && entry != "q");
        }
    }
}

5 个答案:

答案 0 :(得分:5)

在这方面,

||&&在C#和Java中的工作方式相同。

entry != "Q" && entry != "q"(AND)会在角色与Qq不同时继续循环。

entry != "Q" || entry != "q"(OR)对于任何字符均为true,因为字符始终与Qq不同,因此循环永远不会终止。

答案 1 :(得分:2)

conditional operator在Java或C#(或任何编程语言)中没有区别,因为这些是基本的编程概念。你是错误地理解它。

你要做的是

while (entry != "Q" && entry != "q"); 

因此,您的entry变量在实例的任何点(实例平均时间)只能包含一个值。因此,它可以随时Qq而不是both。相反,你应该像

那样做
while (entry != "Q" || entry != "q");

此外,您的entry变量只存储一个char值;为什么要将其声明为string。而是声明为char而不是内存效率。

答案 2 :(得分:1)

do / while循环条件指定何时应该再次执行循环,而不是何时应该退出循环。这就是你需要&&

的原因

我很确定它在Java中的工作方式完全相同。

答案 3 :(得分:1)

标准是继续,而不是终止。如果你使用||,你会说“如果输入不是Q或者不是q则继续循环”,这总是正确的(输入不能同时为两个),所以你永远不会退出。 &&是两种语言中的正确逻辑。

答案 4 :(得分:1)

do ... while循环工作正常。正如其他人所说,当条件陈述变为假时,它将终止。您在此处遇到的||&&的混淆可能是由于编写相同条件的不同方式造成的:

entry != "Q" && entry != "q"

相同

!(entry == "Q" || entry == "q")

De Morgan's law说:

  

否定一个连词就是否定的分离。