if else语句不起作用

时间:2016-12-12 17:28:37

标签: c# if-statement syntax compiler-errors

下面的代码是一个工作代码的片段,用于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.....");
}

4 个答案:

答案 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
}

最后,我顺便提到了这一点,但我想重申,没有必要明确地与truefalse进行比较,所以

if (tow.roomEnd == true)

应该只是

if (tow.roomEnd)

另外,我不认为所有这些条件一下子都是真的有意义。 实际可以同时作为房间结束,死胡同和退出吗?至少,似乎某个特定位置既不是退出也不是死路。如果数据表明其中有几个是真的,那么needs to be corrected就可以使程序正常运行。

答案 1 :(得分:1)

在每个if语句中,您都有关键字return;。 return语句终止方法的执行,因此只显示第一个Console.WriteLine。

仔细阅读:return (C# Reference)

答案 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。