下面的代码是一个工作代码的片段,用于c#中的城堡迷宫游戏。 if else结构只能正确打印dun.roomend == true)。 tow.roomEnd现在显示何时应显示tre.isExit。 tre.isExit根本不显示。 我已将当前变量声明为:
public bool isExit;
public bool deadEnd;
public bool roomEnd;
tre.isExit = true;
dun.deadEnd = true;
tow.roomEnd = true;
if (dun.roomEnd == true)
{
Console.WriteLine("You've fallen into the Dungeons of the Dead. Try again");
return;
}
if (tow.roomEnd == true)
{
Console.WriteLine("You been caught by the Kings guard and have been placed in the tower for life.Try again");
return;
}
else if (tre.isExit == true)
{
Console.WriteLine("You have found the treaure... now run!!");
return;
}
else
{
Console.WriteLine("Too scared.....");
}
答案 0 :(得分:4)
那是因为当你的一个条件成立时你会立即回来。
// Don't explicitly compare to true - just write if (dun.roomEnd)
if (dun.roomEnd == true)
{
Console.WriteLine("You've fallen into the Dungeons of the Dead. Try again");
// You end the method here, so none of the rest of the code after this will execute
return;
}
此外,你做的事实
else if (tre.isExit == true)
表示如果
,则不会执行tow.roomEnd == true
也是如此。 "否则如果"表示"如果当前条件为真且先前条件为假",那么
if (A) {
// do work
}
else if (B) {
// Do work
}
在语义上等同于
if (A) {
// Do work
}
if (!A && B) {
// Do work
}
最后,我顺便提到了这一点,但我想重申,没有必要明确地与true
或false
进行比较,所以
if (tow.roomEnd == true)
应该只是
if (tow.roomEnd)
另外,我不认为所有这些条件一下子都是真的有意义。 实际可以同时作为房间结束,死胡同和退出吗?至少,似乎某个特定位置既不是退出也不是死路。如果数据表明其中有几个是真的,那么needs to be corrected就可以使程序正常运行。
答案 1 :(得分:1)
在每个if语句中,您都有关键字return;
。 return语句终止方法的执行,因此只显示第一个Console.WriteLine。
答案 2 :(得分:0)
阅读你所做的事情,如果我正确地理解了你所追求的是如下。
public bool isExit;
public bool deadEnd;
public bool roomEnd;
tre.isExit = true;
dun.deadEnd = true;
tow.roomEnd = true;
if (dun.roomEnd == true)
{
Console.WriteLine("You've fallen into the Dungeons of the Dead. Try again");
}
else if (tow.roomEnd)
{
Console.WriteLine("You been caught by the Kings guard and have been placed in the tower for life.Try again");
}
else if (tre.isExit)
{
Console.WriteLine("You have found the treaure... now run!!");
}
else
{
Console.WriteLine("Too scared.....");
}
return
这将分别评估每个条件,然后在完成后返回。
这段代码实际上说的是“如果条件1为真,则显示文本并退出if块,然后返回。否则,如果条件2为真,则执行相同操作,条件3/4也执行相同的操作。” / p>
我认为这至少是你所追求的。可以对它进行重构以使其更简单,但目前没有时间重复这一点。
答案 3 :(得分:0)
假设它正在显示死亡龙与地下卫的消息,你需要添加一个" else" to the tow forroom.roomEnd。