C#if else,switch,bool

Cha*_*lie 7 c# if-statement boolean switch-statement

我试图编写一个简单的文本冒险.当我开始编写用户可以进入的方向时,我意识到用户可以放入"东北","西南"等等,所以我想我应该为他们制作案例.

我的问题是case5"north east"在我输入"north east"进入命令行时没有运行.

class Branches

    {
        static void main(string[] args)
        {
            Branch2();
        }

        public static void Branch2()
        {
            Console.WriteLine("");
            Console.WriteLine("(North ,East ,South ,West)");
            string input = Console.ReadLine();
            bool case1 = input.Contains("north");
            bool case2 = input.Contains("east");
            bool case3 = input.Contains("south");
            bool case4 = input.Contains("west");
            bool case5 = input.Contains("north") && input.Contains("east");

            //Console.ReadLine(); 
            int CaseId;
            if (case1)
                CaseId = 1;
            else if (case2)
                CaseId = 2;
            else if (case3)
                CaseId = 3;
            else if (case4)
                CaseId = 4;
            else if (case5)
                CaseId = 5;

            else
                CaseId = 0;

            switch (CaseId)
            {
                case 1:
                    Console.WriteLine("");
                    Console.WriteLine("you head north");
                    break;

                case 2:
                    Console.WriteLine("");
                    Console.WriteLine("you head east");
                    break;

                case 3:
                    Console.WriteLine("");
                    Console.WriteLine("you head south");
                    break;

                case 4:
                    Console.WriteLine("");
                    Console.WriteLine("you head west");
                    break;

                case 5:
                    Console.WriteLine("");
                    Console.WriteLine("you head north east");
                    break;

                default:
                    Console.WriteLine("enter a valid direction");
                    break;


            }
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

Kam*_*ski 13

因为输入包含北,所以首先执行if而不是搜索else if,尝试反转if if并将case5作为第一个if :)

            if (case5)
                CaseId = 5;
            else if (case2)
                CaseId = 2;
            else if (case3)
                CaseId = 3;
            else if (case4)
                CaseId = 4;
            else if (case1)
                CaseId = 1;
Run Code Online (Sandbox Code Playgroud)


NPS*_*000 4

虽然这个问题已经得到回答,但我想发表一个评论:

您的布尔值是不必要的,并且有助于隐藏问题。

例如这个:

        string input = Console.ReadLine();
        bool case1 = input.Contains("north");
        bool case2 = input.Contains("east");
        bool case3 = input.Contains("south");
        bool case4 = input.Contains("west");
        bool case5 = input.Contains("north") && input.Contains("east");

        int CaseId;
        if (case1)
            CaseId = 1;
        else if (case2)
            CaseId = 2;
        else if (case3)
            CaseId = 3;
        else if (case4)
            CaseId = 4;
        else if (case5)
            CaseId = 5;
Run Code Online (Sandbox Code Playgroud)

与此相同:

        string input = Console.ReadLine();
        int CaseId;

        if (input.Contains("north")) CaseId = 1;
        else if (input.Contains("east")) CaseId = 2;
        else if (input.Contains("south")) CaseId = 3;
        else if (input.Contains("west")) CaseId = 4;
        else if (input.Contains("north") 
                && input.Contains("east")) CaseId = 5;
Run Code Online (Sandbox Code Playgroud)

这应该非常明显地表明语句 'input.Contains("north") && input.Contains("east")' 永远不会运行 - 因为它要求 'input.Contains("north')' 为 false (感谢“else”)。调试和单步执行在这里确实有很大帮助。

所以,是的,作为一名程序员,真正要简洁地编写你的代码——永远不要编写超出你需要的内容。在你的代码中,你有一堆布尔值、一堆 if 和一个 switch 语句 - 所有这些都有效地完成相同的工作。

我个人会这样写:

        string input = Console.ReadLine();

        if (input.Contains("north") && input.Contains("east")) 
            Console.WriteLine("\nyou head north east");
        else if (input.Contains("north")) 
            Console.WriteLine("\nyou head north");
        else if (input.Contains("east")) 
            Console.WriteLine("\nyou head east");
        else if (input.Contains("south")) 
            Console.WriteLine("\nyou head south");
        else if (input.Contains("west"))                    
            Console.WriteLine("\nyou head west");
        else 
            Console.WriteLine("enter a valid direction");
Run Code Online (Sandbox Code Playgroud)

它的可读性和可理解性是相同的,但涉及三分之一的行,因此出错的可能性也增加了三分之一。