【问题标题】:C# Change If to switch, how to handle "and"C# Change If 切换,如何处理“和”
【发布时间】:2014-11-21 09:18:59
【问题描述】:

所以我有一个工作表中的任务:

我必须将这些 If 更改为开关,但我该怎么做呢?这是如果:

if (i<0 || i>15)  Console.WriteLine ("A");
else if (i%5<2 && i/3>3)  Console.WriteLine ("B");
else if (3<i && i<10)  Console.WriteLine ("C");
else if (i&2==2)  Console.WriteLine ("D");
else  Console.WriteLine ("E");

这是我做的开关,但那个开关不好,但我不知道如何做出一个好的开关,我希望你能帮助我。

switch (i)
    case (i<0):
    case (i>15):
        Console.WriteLine ("A“)
        Break;
    Case (i%5<2 && i/3>3) : 
        Console.WriteLine ("B“)
        Break;
    case (3<i && i<10) :
        Console.WriteLine ("C");
        Break;
    Case (i&2==2)  :
         Console.WriteLine ("D");
        Break;
    Default
         Console.WriteLine ("E");
        Break;

它不必在程序中运行,它只是工作表中的一项任务

【问题讨论】:

  • 您需要使用开关的原因是什么?
  • 这是工作表中的一项任务
  • FWIW 我认为这里的反对意见有点苛刻。鉴于问题集,恕我直言,这是一个公平的问题
  • @Mike:没有愚蠢的问题。同意否决票有点苛刻。
  • @EmilLundin:已经弄清楚发生了什么。这并不是关于switch 限制的问题,而是让@Mike 了解 if 语句本身的逻辑(见我的回答)。

标签: c# if-statement switch-statement case


【解决方案1】:

我还没有完全弄清楚所有的规则,但我认为你所追求的是这样的:

问题希望您意识到您得到的结果数量有限,因为第一条规则是(i&lt;0 || i&gt;15)。这可以是 switch 语句的默认值。

然后你需要计算出所有整数 0-15 会发生什么,并将它们写入开关的其余部分。

所以你在追求一些类似的东西(虽然这没有你的逻辑 - 你可以弄清楚,这样你就明白发生了什么):

switch (i) 
{

    case 0:
    case 2:
    case 5:
        Console.Write("Something")
        break;
    case 1:
    case 7:
        Console.Write("Something Else")
        break;

    default
        Console.WriteLine ("A“)
        Break;
}

【讨论】:

  • 我想这应该是这样的,谢谢!我希望我能从中有所收获:)
【解决方案2】:

我认为是:

switch (i)
{
  case 4:
  case 5:
  case 6:
  case 7:
  case 8:
  case 9:
      Console.WriteLine("C");
      break;
  case 0:
  case 1:
  case 3:
  case 10:
  case 11:
  case 12:
  case 13:
  case 14:
     Console.WriteLine("E");
     break;
  case 2:
     Console.WriteLine("D");
     break;
  case 15:
     Console.WriteLine("B");
     break;
  default:
     Console.WriteLine("A");
     break;
}

【讨论】:

  • @BOAndrew:很好地想通了,虽然我尽量不在盘子上给出答案!
  • 我并没有真正完成任务,但感谢您的回答@Jon Egerton,我知道我很愚蠢 :D,我会自己弄清楚,但我可能会回来看看这个 :)谢谢!
  • 好的......也许我发布解决方案而不是我如何尝试找到它并不是那么聪明。但是乔恩,至少我们没有多余的答案:)
  • 我现在自己解决了,感谢 Jon 和 Andrew 的帮助 :),我只是不明白这些背后有什么逻辑,我感到很惭愧 :(。我只能将一个答案标记为正确虽然
【解决方案3】:

使用单独的变量,您必须在其中嵌入分段逻辑。这是一个示例:

//using enum
public enum MySwitchableVariable {
    NotDefined, //optional
    LessThanZero,
    MoreThanFifteen,
    RestOfFiveLessThanTwoAndFactorMoreThanThree, //its too complex to describe
    BetweenThreeAndTen,
    RestOfTwoIsTwo,
}

然后你必须创建一个函数,它接受一个整数并吐出这个枚举的一个案例:

public MySwitchableVariable calculate(int i) {
    var result = MySwitchableVariable.NotDefined;
    // your implementation here
    return result;
}

最后你可以像这样切换那个烦人的变量:

var Variable = calculate(i);
switch(Variable) {
    case MySwitchableVariable.LessThanZero:
    // you know the rest

这是您(或您的导师)想要的吗?

【讨论】:

  • 我不确定,我认为这不是他想要的,我认为这更像 Jon Egerton 所说的,也许这可以帮助我,但谢谢!
  • 这是一种有趣的方法,尽管您在 calculate 方法中最终得到的是原始的 if 语句,因此在这个特定实例中并没有真正的帮助。
【解决方案4】:

你不能这样做。使用switch 语句意味着switch 中的变量可以采用多个离散常量值。

来自文档:

switch 语句是选择开关的控制语句 从候选列表中执行的部分。

此外,

每个案例标签指定一个常数值。 switch 语句将控制转移到 case 标签匹配的 switch 部分 switch 表达式的值(示例中为 caseSwitch)。如果没有情况 标签包含匹配值,控制转移到默认值 部分,如果有的话。如果没有默认部分,则不执行任何操作 采取和控制转移到 switch 语句之外。在里面 前面的例子,第一个 switch 部分中的语句是 因为 case 1 匹配 caseSwitch 的值而被执行。

【讨论】:

  • 我不明白为什么我把这个作为一项任务:/
  • @Mike 这是作为家庭作业分配给您的,还是您被要求在工作中这样做?你能否提供更多关于你被问到的信息(尽管我认为没有更多信息)?谢谢
  • 是的,这只是别人给我的任务。它是一个工作表,上面有不同的任务,可以帮助我进入编程和 C#。这一项任务只是说,将这些 if 语句更改为 switch 语句,与任何程序或任何东西无关,这些是我得到的唯一信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
相关资源
最近更新 更多