首页 > 编程语言 >第二章《Java程序世界初探》第10节:多重if...else语句

第二章《Java程序世界初探》第10节:多重if...else语句

时间:2022-12-29 16:00:24浏览次数:53  
标签:10 Java System else score println 90 out

​程序员希望实现这样的功能:由用户从控制台输入一个考试分数,如果这个分数在90或90以上输出“优”,如果分数在70到89输出“良”,如果分数在60到69输出“平”,如果分数在60以下输出“差” (暂不考虑分数大于100和小于0的错误处理)。

这是一个典型的“数字归类”问题。假设用户输入的分数用变量score来表示,并且运用之前所学的逻辑运算符,可以用如下代码实现该功能:​

if(score>=90) {​
System.out.println("优");​
}​
if(score>=70 && score<90) {​
System.out.println("良");​
}​
if(score>=60 && score<70) {​
System.out.println("平");​
}​
if(score<60) {​
System.out.println("差");​
}​

这段程序中一共出现了4个if条件语句。通过观察不难发现:程序虽然能够实现题目要求的功能,但存在重复判断的情况,也就是说:无论用户输入的分数是多少,都会进行4次判断。如果用户输入95分,满足第1个if条件,此时直接就可以把分数归为“优”,后面的3次判断已经没有必要进行。如何实现在score>=90的情况下不进行后面的3次判断呢?很简单,把后面3个if语句放到else块中就行,这样,在score>=90的情况下只进行1次判断,只有在score<90的情况下才进行后面的判断,代码如下:​

if(score>=90) {//①​
System.out.println("优");​
}else {//①​
if(score>=70 && score<90) {​
System.out.println("良");​
}​
if(score>=60 && score<70) {​
System.out.println("平");​
}​
if(score<60) {​
System.out.println("差");​
}​
}​

为了方便读者阅读,在程序中用注释的形式为if和else块进行了编号。在这段程序中,①号else与①号if相对应。当score>=90的情况下,①号if条件成立,程序不会进入else部分,此时只需要进行1次判断就能完成分数归类。​

虽然优化了程序,但问题并没有彻底解决。当score<90的情况下,还是会进行3次判断。如果用户输入80分,程序进入else块,else块中的第1个if条件已经成立,分数可直接归为“良”,完全没必要进行后面的两次判断。解决这个问题可以仿照之前的优化办法,在程序中再添加一个else,代码如下:​

if(score>=90) {//①​
System.out.println("优");​
}else {//①​
if(score>=70 && score<90) {//②​
System.out.println("良");​
}else{//②​
if(score>=60 && score<70) {​
System.out.println("平");​
}​
if(score<60) {​
System.out.println("差");​
}​
}​
}​

这段程序中,②号else与②号if相对应。这样,一旦②号if条件成立,就无需进行后面的判断。但是在号else块中,之前存在的重复判断问题仍然存在,所以,还需按照相同的方式继续优化程序,代码如下:​

if(score>=90) {//①​
System.out.println("优");​
}else {//①​
if(score>=70 && score<90) {//②​
System.out.println("良");​
}else{//②​
if(score>=60 && score<70) {//③​
System.out.println("平");​
}else{//③​
if(score<60) {//④​
System.out.println("差");​
}​
}​
}​
}​

经过3次优化,程序效率已经大大提升。但是仔细观察不难发现:②和③这两个if语句中不需要列出两个判断条件。因为②号if语句位于①号else块中,这意味着当进行②号if的条件判断时,score的值必定已经小于90。同理,③号if位于②号else块中,当进行③号if的条件判断时,score的值必定已经小于70。按照这种思路查看代码,不难发现④号if是完全多余的,因为④号if位于③号else块中,程序只要能进入③号else块,必然是因为score的值小于60,而④号if做了不必要的重复判断。综上所述,程序代码可以进一步优化为:​

if(score>=90) {//①​
System.out.println("优");​
}else {//①​
if(score>=70) {//②仅保留一个判断条件​
System.out.println("良");​
}else{//②​
if(score>=60) {//③仅保留一个判断条件​
System.out.println("平");​
}else{//③​
System.out.println("差");​
}​
}​
}​

经过优化之后,去掉了④号if语句。Java语言还允许程序员在某个else块中仅存在判断性的语句的情况下去掉它的大括号,这样,程序就可以进一步优化为以下形式:​

if(score>=90) {​
System.out.println("优");​
}else if(score>=70) { ​
System.out.println("良");​
}else if(score>=60) { ​
System.out.println("平");​
}else{​
System.out.println("差");​
}​

使用这样方式书写的程序去掉了所有不必要的判断,执行效率最高。同时,程序结构清晰,易于阅读。以后读者在遇到类似的“数字归类”问题时,建议都使用这样的结构书写程序。以下是原题目的完整代码:​

【例02_11 分数归类】

Exam02_11.java​

import java.util.Scanner;

public class Exam02_11 {
public static void main(String[] args) {
int score;// 分数
Scanner sc = new Scanner(System.in);
System.out.println("请输入分数:");
score = sc.nextInt();
if (score >= 90) {
System.out.println("优");
} else if (score >= 70) {
System.out.println("良");
} else if (score >= 60) {
System.out.println("平");
} else {
System.out.println("差");
}
}
}

除此文字版教程外,小伙伴们还可以点击这里观看我在本站的视频课程学习Java。

标签:10,Java,System,else,score,println,90,out
From: https://blog.51cto.com/mugexuetang/5978204

相关文章