繁体   English   中英

多个else / if语句的目的? 如果不是else语句,则不是一个

[英]purpose of multiple else/if statements? NOT single if then else statement

我只是想知道是否有其他目的,或者是否纯粹为了提高代码的可读性而编写。 例如,此代码取自oracle java教程:

class IfElseDemo {
public static void main(String[] args) {

    int testscore = 76;
    char grade;

    if (testscore >= 90) {
        grade = 'A';
    } else if (testscore >= 80) {
        grade = 'B';
    } else if (testscore >= 70) {
        grade = 'C';
    } else if (testscore >= 60) {
        grade = 'D';
    } else {
        grade = 'F';
    }
    System.out.println("Grade = " + grade);
}
}

肯定用if编写“ else if”部分会做同样的事情吗? 如果有人可以帮我解释一下,我将不胜感激。 谢谢

这主要与性能有关,也与您要表达的内容有关! 假设testscore是> = 90,那么等级变量将被设置为“ A”,而其他if语句将不被评估。

将代码重写为

class IfElseDemo {
  public static void main(String[] args) {

  int testscore = 76;
  char grade;

  if (testscore >= 90) {
    grade = 'A';
  } 
  if (testscore >= 80) {
    grade = 'B';
  }
  if (testscore >= 70) {
    grade = 'C';
  } 
  if (testscore >= 60) {
    grade = 'D';
  } else {
    grade = 'F';
  }
  System.out.println("Grade = " + grade);
  }
}

还将检查testscore是否> = 80并将成绩设置为“ B”,然后检查> = 70并将其设置为“ C”,依此类推...

因此,在您的示例中,不仅会得到错误的结果,还会进行更多的检查!

正如@schneida已经提到的, else if跳过条件检查,如果先前的条件已经为真。 如果在if情况下条件发生更改,那么跳过以下条件检查非常重要:

if (value > 100)
{ 
    value *= 2.0; // get some big bonus
} 
else if (value > 50)
{
    value *= 1.5;
}

假设testScore为93。使用上面提到的代码,输出为

等级= A

但是,如果将“ else if”替换为“ if”,它将执行所有if语句,因为首先将哪个等级设置为A,然后设置为B,然后设置为C ,最后将其设置为D。 因此,最终答案将是Grade = D希望对您有所帮助。

您可以完全消除ifelse if分支。 加载Map<Integer, Character>的值覆盖十进制等级范围(FA为0-10)。 然后将给定的测试分数除以10以确定正确的成绩。 喜欢,

Map<Integer, Character> map = new HashMap<>();
for (int i = 0 ; i < 6 ;i++) {
    map.put(i, 'F');
}
map.put(6, 'D');
map.put(7, 'C');
map.put(8, 'B');
map.put(9, 'A');
map.put(10, 'A');

for (int testscore = 100; testscore >= 0; testscore--) {
    int v = (int) (testscore / 10.0);
    System.out.printf("%d %c%n", testscore, map.get(v));
}

输出所有可能的分数及其结果,而不包含任何if

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM