[英]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
希望对您有所帮助。
您可以完全消除if
和else 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.