结束一个if语句C#

时间:2012-06-01 06:40:29

标签: c# if-statement

我不知道在这种情况下还有什么用,但是if语句。

我要做的是从Windows表单中获取值string direction;并检查它是否具有我要查找的值。然后检查turtleDir是否是指示方向turtleDir的字符串值。

问题来自于else if语句,当turtleDirlookingleft时,它会执行所有其他if语句。我想要它做的是在它完成其他if语句后需要停止并等待下一个命令。没有经过所有的陈述。

有人可以告诉我如何解决它以及我做错了什么?

以下是代码:

else if ( Program.form.direction == "right" ) 
{
   if ( turtleDir == "left" )
   {
      angle = -1.6f;
      turtleDir = "lookingLeft";
      Program.form.direction = "";
   }
   else if ( turtleDir == "lookingLeft" )
   {
      angle = 3.15f;
      turtleDir = "lookingDown";
   }
   else if ( turtleDir == "lookingDown" )
   {
      angle = 1.6f;
      turtleDir = "lookingRight";
   }
   else if ( turtleDir == "lookingRight" )
   {
      angle = 0.0f;
      turtleDir = "lookingUp";   
   }
}

4 个答案:

答案 0 :(得分:6)

您也可以对字符串使用switch语句:

switch (turtleDir) {
    case "left":
        angle = -1.6f;
        turtleDir = "lookingLeft";
        Program.form.direction = "";
        break;
    case "lookingLeft":
        angle = 3.15f;
        turtleDir = "lookingDown";
        break;
    // other cases
}

这样,在您的指示完成后,switch块始终会退出。您还可以通过在末尾添加case default:来指定当字符串与这些值都不匹配时要执行的操作。请记住,每个案例都需要通过break语句(或return / throw来终止,但在这种情况下我认为您不需要这些语句)。

如果仍然执行所有案例,则问题出在其他地方。如果一个方法包含这个代码并且从例如turtleDir == "left",方法的每次连续调用都会让turtleDir循环,直到每个案例都被执行,turtleDir最终得到最终值"lookingUp"。因此,请查看您的控制流程,并可能跟踪您是否已执行此检查。也许跟踪经过的时间并改变turtleDir只有当它已经处于特定状态一段时间(我不知道你的要求)时。

编辑:您应该在每个Program.form.direction = ""语句中设置case。这就是你的代码一次又一次地被执行的原因。此外,如果没有输入方向,也要清除它。

答案 1 :(得分:0)

你可以使用一个空的return; - 语句,但是你也可以保留你的方法......

答案 2 :(得分:0)

使用开关

switch (turtleDir)
{
    case "left":
        angle = -1.6f;
        turtleDir = "lookingLeft";
        Program.form.direction = "";
        break;

    case "lookingLeft":
        angle = 3.15f;
        turtleDir = "lookingDown";
        break;

    case "lookingDown":
        angle = 1.6f;
        turtleDir = "lookingRight";
        break;

    case "lookingRight":
        angle = 0.0f;
        turtleDir = "lookingUp";   
        break;

    default:
        // Optional, but place any actions if non of the above is matched
        break;
}

答案 3 :(得分:0)

这里有别的东西 ......

只会执行IF / ELSE-IF语句的一个分支。出于可读性原因,您可能希望重构SWITCH语句;但不是因为它会改变你的行为

看看这段代码:

    if(0 == 0) { Console.WriteLine("Branch 1"); }
    else if(true==true) { Console.WriteLine("Branch 2"); }
    else if(false==false) { Console.WriteLine("Branch 3"); }

所有条件都是正确的。第一个执行。只有第一个。

在此代码中 - 只有后两个是真的:         if(0 == 2){Console.WriteLine(“Branch 1”); }         else if(true == true){Console.WriteLine(“Branch 2”); }         else if(false == false){Console.WriteLine(“Branch 3”); }

只有第二个执行。

如果条件为真,则一系列else-if不会全部执行。

我的猜测是你正在快速地循环这个或者下一个迭代进入IF逻辑并执行下一个分支。您可能需要发布更多代码,以便为您的特定情况获得更有用的答案。

跟踪此问题的最佳方法是IMHO,它只是在IF逻辑的开头放置一个断点,并逐步执行一次代码。您应该看到它只进入一个ELSE-IF分支并退出,您可以看到它是否/为什么重新进入。

最后,SWITCH语句不允许您隐式执行多个分支。

    switch(test)
    {
        case "one":
            Console.WriteLine("Branch 1");
        case "two":
            Console.WriteLine("Branch 2");
    }

那甚至都不会编译。我相信C / C ++你可以通过case语句来解决,除非你明确添加了break;或类似的控制声明。在C#中并非如此。