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)
虽然这个问题已经得到回答,但我想发表一个评论:
您的布尔值是不必要的,并且有助于隐藏问题。
例如这个:
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)
它的可读性和可理解性是相同的,但涉及三分之一的行,因此出错的可能性也增加了三分之一。