Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在这种情况下,如何避免其他问题_C#_Java_Syntax - Fatal编程技术网

C# 在这种情况下,如何避免其他问题

C# 在这种情况下,如何避免其他问题,c#,java,syntax,C#,Java,Syntax,以本守则为例— if(enable) { if(enableCar) { // do something } else if(enableComputer) { // do something } else if(enableTV) { // do something } else { otherChoice(); } } else { otherChoice(); } // More code here so return isn't

以本守则为例—

if(enable) {
  if(enableCar) {
    // do something
  } else if(enableComputer) {
    // do something
  } else if(enableTV) {
    // do something
  } else {
    otherChoice();
  }
} else {
  otherChoice();
}

// More code here so return isn't possible
我应该如何避免如此多的
else
语句,我不能删除
if(enable)
,因为
carEnable
可以返回true,而
enable
本身将是false

我不能使用return,因为下面有更多代码

那么,我应该如何避免如此多的
else
语句呢

当然,这只是一个例子:)


谢谢

您的要求还没有完全明确,但我认为您的要求需要一个模块


[编辑]:由于后来添加了
Java
的标记,因此您可以使用
enum
进行此操作。

您也可以尝试使用
else if
和一个
else

    if (enableCar) {
        // do something
    }
    else if (enableComputer) {
        // do something
    }
    else if (enableTV) {
        // do something
    } else {
        otherChoice();
    }

您可以创建一个switch语句

if(enable)
{
    switch()
    {
         case enableCar:
         // do some code
         break;
         case enableComputer:
         //do some code
         break; 
    }
}

伪代码缺少太多的信息。有时,如果。。。else可以通过使用多态性来避免。看看这条线。阅读这篇文章。

实际上,好的结构分析是一种通用的方法,如何摆脱if-else语句,因为结构本身包含一些信息,所以必须根据if-else语句来决定

所以你应该考虑你需要哪些课程,他们有哪些责任和多样性。你的例子太抽象了,所以我不能确切地告诉你应该做什么

例如,你应该考虑命令模式:


然后您可以只使用“commad.do()”命令本身就知道该做什么,因为每个命令都有自己的功能。

您可以将选项添加到枚举并将其传递给交换机

public enum EnableOptions
{
   enableCar,

   enableComputer,

  enableTV


}
然后为选项创建一个变量并将其传递给开关:

EnableOptions option = EnableOptions.enableCar;



if(enabled)
{

    switch(option)
    {
     case EnableOptions.enableCar:


           //method
           break;
     case EnableOptions.enableComputer:

          // methods
          break;

        etc... for all of your options

      default:

        //something
        break;

    }

}

如果
enable
为真,并且
enableCar
enableComputer
enableTV
都为假,那么
otherChoice()
会运行三次吗?“举个例子”如果enableCar、enableComputer和enableTV都为假,则运行otherChoice代码三次?这三个布尔值是互斥的,或者您可以将这三个值都设置为true?这里应该提到,在Java中,switch对布尔值不起作用。Ur代码显示该方法的结果可能是布尔输出。switch语句将是一个选项。我认为我的解决方案没有问题。但是,它没有说明所使用的语言,因此这可能不适合您所寻找的内容,但可能对其他人有所帮助。我想您是对的。。好的,那么我将关闭/删除此帖子。所以人们不会感到困惑。。。见鬼,我不能关这个,你不必自己关。如果mods认为帖子没有价值,他们会删除它。事实上,我认为这个问题(或者更好的答案)可能对某些人有用。