条件语句
条件语句,是程序中根据条件是否成立进行选择执行的一类语句,这类语句在实际使用中,难点在于如何准确的抽象条件。例如实现程序登录功能时,如果用户名和密码正确,则进入系统,否则弹出“密码错误”这样的提示框等。本部分对于条件语句的介绍,重点在于语法讲解和基本的使用,更详细的使用参看后续的综合示例部分。
在Java 语言中,条件语句主要有两类语法:if 语句和switch 语句。
if语句
if 关键字中文意思是如果,其细致的语法归纳来说总共有三种:if语句、if-else 语句和if-else if-else 语句,下面分别进行介绍。
------------------------------------------------------------------------------------------------------------------------------------------------------------
if 语句该类语句的语法格式为:



Java无条件与 条件语句java_System



语法说明


if 是该语句中的关键字,后续紧跟一对小括号,该对小括号任何时候不能省略,小括号的内部是具体的条件,语法上要求该表达式结果为boolean 类型。后续为功能的代码,也就是当条件成立时执行的代码,在程序书写时,一般为了直观的表达包含关系,功能代码一般需要缩进。


需要特别注意的是


①:这里的功能代码只能是一行,关于多行结构的功能代码,后续将说明。


②:if(条件表达式)后续一般不书写分号


if 语句的执行流程为: 如果条件表达式成立,则执行功能代码,如果条件表达式不成立,则不执行后续的功能代码


示例代码:


int a = 10;

if(a >= 0)

            System.out.println(“a 是正数”);

if( a % 2 == 0)

            System.out. println(“a 是偶数”);

在该示例代码中,第一个条件是判断变量a 的值是否大于等于零,如果该条件成立则执行输出,第二个条件是判断变量a 是否为偶数,如果成立也输出。


注意以下代码的执行流程:


int m = 20;

if( m > 20)

        m += 20;

System.out.println(m);


按照前面的语法格式说明,只有m+=20;这行代码属于功能代码,而后续的输出语句和前面的条件形成顺序结构,所以该程序执行以后输出的结果为20。如果当条件成立时,需要执行的语句有多句,则可以使用语句块来进行表述,语法格式如下:



Java无条件与 条件语句java_概念_02



使用这种语法格式,使用一个代码块来代替前面的功能代码,这样可以在代码块内部书写任意多行的代码,而且也使整个程序的逻辑比较清楚,所以在实际的代码编写中推荐使用该种逻辑。


------------------------------------------------------------------------------------------------------------------------------------------------------------


if-else 语句if-else 语句实现了封闭的条件,在程序中使用的更加常见。其中else关键字的作用是“否则”,即条件不成立的情况。


if-else 语句的语法格式如下:



Java无条件与 条件语句java_概念_03



语法说明:其中前面的部分和if 语句一样,else 部分后面是功能的代码,按照该语法格式,功能代码只能有一句。


执行顺序:如果条件成立,则执行if 语句中的功能代码1,否则执行else 中的功能代码2。


示例代码为:


int n = 12;

if(n % 2 != 0)

        System.out.println(“n 是奇数”);

else

        System.out.println(“n 不是奇数”);

则因为n%2 的值是0,条件不成立,则执行else 语句的代码,程序输出“n 不是奇数”。在实际使用时,为了结构清楚,以及可以在功能代码部分书写多行代码,一般把功能代码部分使用代码块,则语法格式为:



Java无条件与 条件语句java_概念_04



当程序中有多个if 时,else 语句和最近的if 匹配。示例代码:



Java无条件与 条件语句java_Java无条件与_05



则这里的else 语句和条件2 对应的if 语句匹配,前面的条件1 是一个独立的语句。在实际代码中,可以使用大括号使整个程序的结构更加清楚。对于if-else 语句来说,因为if 的条件和else 的条件是互斥的,所以在实际执行中,只有一个语句中的功能代码会得到执行。在实际开发中,有些公司在书写条件时,即使else 语句中不书写代码,也要求必须书写else,这样可以让条件封闭。这个不是语法上必须的。


------------------------------------------------------------------------------------------------------------------------------------------------------------


if-else if-else 语句在现实中,有些时候的条件不是一个,而是一组相关的条件,例如将阿拉伯数字转换为中文大写,根据分数转换为对应的等级等,都是多条件的结构,在程序中为了避免写多个if 语句的结构,提供了一类专门的多分支语句,这就是if-else if-else 语句。


if-else if-else 语句的语法格式为:



Java无条件与 条件语句java_Java无条件与_06



执行流程:当条件1 成立时,则执行功能代码1;当条件1 不成立且条件2 成立时,则执行功能代码2;如果条件1、条件2 都不成立且条件3 成立,则执行功能代码3,依次类推,如果所有条件都不成立,则执行else 语句的功能代码。


下面是一个实现根据月份的值,输出该月份包含的日期数,2 月份全部输出28,不考虑闰年的示例代码:


int month = 3;
int days = 0; //日期数
if(month == 1){
    days = 31;
}else if(month == 2){
    days = 28;
} else if(month == 3){
    days = 31;
} else if(month == 4){
    days = 30;
} else if(month == 5){
    days = 31;
} else if(month == 6){
    days = 30;
} else if(month == 7){
    days = 31;
} else if(month == 8){
    days = 31;
} else if(month == 9){
    days = 30;
} else if(month == 10){
    days = 31;
} else if(month == 11){
    days = 30;
} else if(month == 12){
    days = 31;
}
    System.out.println(days);


再来看一个示例代码,该代码的功能是实现将百分制的成绩转换为A、


B、C、D 和E,代码如下:


int score = 87;
if(score >= 90){
    System.out.println(‘A’);
} else if(score >= 80){
    System.out.println(‘B’);
} else if(score >= 70){
    System.out.println(‘C’);
} else if(score >= 60){
    System.out.println(‘D’);
} else{
    System.out.println(‘E’);
}
从该代码中可知,每个else if 语句在书写时是有顺序的,在实际书写时,必须按照逻辑上的顺序进行书写,否则将出现逻辑错误。if-else if-else 语句是Java 语言中提供的一个多分支条件语句,但是在判断某些问题时,会书写的比较麻烦,所以在语法中提供了另外一个语句——switch 语句来更好的实现多分支语句的判别。


------------------------------------------------------------------------------------------------------------------------------------------------------------


switch 语句switch 关键字的中文意思是开关、转换的意思,switch 语句在条件语句中特别适合做一组变量相等的判断,在结构上比if 语句要清晰很多。

switch 语句的语法格式为:



Java无条件与 条件语句java_基础_07



语法说明


1、表达式的类型只能为byte、short、char 和int 这4 种之一。


2、值1、值2…值n 只能为常数或常量,不能为变量。


3、功能代码部分可以写任意多句。


4、break 关键字的意思是中断,指结束switch 语句,break 语句为可选。


5、case 语句可以有任意多句,是标号语句。


6、default 语句可以写在switch 语句中的任意位置,功能类似于if 语句中的else。


执行流程


当表达式的值和对应case 语句后的值相同时,既从该位置开始向下执行,一直执行到switch 语句的结束,在执行中,如果遇到break 语句,则结束switch 语句的执行。则在if-else if-else 语句中,根据月份获得每个月的天数,不考虑闰年,的示例代码如下:


int month = 10;
int days = 0;
switch(month){
    case 1:
    days = 31;
    break;
case 2:
    days = 28;
break;
case 3:
    days = 31;
break;
case 4:
    days = 30;
break;
case 5:
    days = 31;
break;
case 6:
    days = 30;
break;
case 7:
    days = 31;
break;
case 8:
    days = 31;
break;
case 9:
    days = 30;
break;
case 10:
    days = 31;
break;
case 11:
    days = 30;
break;
case 12:
    days = 31;
break;
}
System.out.println(days);
根据switch 语句的语法,该代码也可以简化为如下格式:


int month = 10;
int days = 0;
switch(month){
case 2:
    days = 28;
break;
case 4:
case 6:
case 9:
case 11:
    days = 30;
break;
default:
    days = 31;
}
System.out.println(days);
代码说明:


因为switch 语句每次比较的是相等关系,所以可以把功能相同的case语句合并起来,而且可以把其他的条件合并到default 语句中,这样可以简化case 语句的书写。该代码的结构比最初的代码简洁很多了。虽然在语法上switch 只能比较相等的结构,其实某些区间的判别也可以通过一定的变换使用switch 语句进行实现。例如if-else if-else 语句示例中的分数转换的示例,则分数的区间位于0-100 之间,如果一个一个的去比较,case 语句的数量会比较多,所以可以做一个简单的数字变换,只比较分数的十位及以上数字,这样数字的区间就缩小到了0-10,则实现的代码如下:


int score = 87;
switch(score / 10){
case 10:
case 9:
    System.out.println(‘A’);
break;
case 8:
    System.out.println(‘B’);
break;
case 7:
    System.out.println(‘C’);
break;
case 6:
    System.out.println(‘D’);
break;
default:
    System.out.println(‘E’);
}
当然,switch 语句不是很适合进行区间的判别,更多的区间判别一般还是使用if-else if-else 语句进行实现。


------------------------------------------------------------------------------------------------------------------------------------------------------------

小结:

if 语句可以实现程序中所有的条件,switch 语句特别适合一系列点相等的判别,结构显得比较清晰,而且执行速度比if 语句要稍微快一些,在实际的代码中,可以根据需要来使用对应的语句实现程序要求的逻辑功能。