【问题标题】:Is this qualified as a switch statement?这是否有资格作为 switch 语句?
【发布时间】:2015-10-10 20:57:56
【问题描述】:

我必须将其用作 switch 语句。这是一个switch语句,对吧?

    if (dGrade > 93.99) {strFGrade= strA;}                              //A= above 94

    else if (dGrade >= 90.00 && dGrade <= 93.99 ) {strFGrade= strLA;}   //A- = 90-93.99

    else if (dGrade >= 87.70 && dGrade <= 89.99)  {strFGrade= strHB;}   //B+= 87.7-89.99

    else if (dGrade >= 83.33 && dGrade <= 87.69)  {strFGrade= strB;}    //B= 83.33-87.69

    else if (dGrade >= 80.00 && dGrade <= 83.32 ) {strFGrade= strLB;}   //B- = 80-83.32

    else if (dGrade >= 75.00 && dGrade <= 79.99 ) {strFGrade= strHC;}   //C+= 75-79.99

    else if (dGrade >= 70.00 && dGrade <= 74.99 ) {strFGrade= strC;}    //C= 70-74.99

    else if (dGrade >= 60.00 && dGrade <= 69.99 ) {strFGrade= strD;}    //D=60-69.99

    else    {strFGrade= strF;}                                          //F= below 60

【问题讨论】:

  • 不,switch 语句有特殊的语法,它不仅仅是一种 if 语句的名称(但它们是相似的)。看到这个:docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html
  • 但是公平地说,除非你使用完全没有意义的“switch(true)”反模式,否则这段代码在它的状态下不能直接转换成 switch 命令。
  • 虽然这不能转换成switch,但这并不意味着它不能用更少的代码重写。
  • 这段代码只是乞求使用 Java enum
  • 我还想指出,这段代码存在漏洞,在大型生产系统中无法正常工作。如果dGrade 的值是 83.325,会发生什么?在这种情况下,strFGrade = strF。不公平!

标签: java switch-statement


【解决方案1】:

这不是 switch 语句。 Switch 语句的结构如下:

switch (dgrade) {
  case 90:
    doSomething();
    break;
  case 100:
    doSomethingElse();
    break;
  default:
    do();
}

在您的情况下,您实际上不能使用 switch 语句,因为您有条件,所以您只能使用 if-else 语句

【讨论】:

    【解决方案2】:

    不,不可能用 switch 语句测试一个值是否位于这样的区间内。 Switch 语句对一个类型的每个单独的值都有一个分支,如果被打开的值与分支的值等于,则采用该分支。

    话虽如此,您可以像这样以更紧凑的方式编写代码:

    if      (dGrade >= 94.00) strFGrade = strA;
    else if (dGrade >= 90.00) strFGrade = strLA; 
    else if (dGrade >= 87.70) strFGrade = strHB; 
    else if (dGrade >= 83.33) strFGrade = strB;  
    else if (dGrade >= 80.00) strFGrade = strLB; 
    else if (dGrade >= 75.00) strFGrade = strHC; 
    else if (dGrade >= 70.00) strFGrade = strC;  
    else if (dGrade >= 60.00) strFGrade = strD;  
    else strFGrade = strF;
    

    这里的诀窍是你可以省略一半的测试,因为你已经在前面的 if 语句中测试过了。这没有考虑到值可能位于原始代码中两个不同间隔的限制之间

    这里也不需要块({})。

    并注意常规的空白使用,= 两边都有空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-07
      相关资源
      最近更新 更多