第5章流程控制语句
一、 程序的结构:
一般来说程序的结构包含有下面三种:
二、顺序结构
程序至上而下逐行执行,一条语句执行完之后继续执行下一条语句,一直到程序的末尾
三、选择结构
3.1 、IF语句--单分支结构
if语句:
编写格式
if(条件){
if语句的执行体
}
条件: 结果必须是布尔类型 1==1 true||false
执行体: 当if中的条件为true的时候,执行大括号中的执行体
if条件是false的时候,什么也不做
*/
public class IfDemo{ public static void main(String[] args){ int i = 5 ; //对变量i进行if判断此处省略大括号 if(i<8)System.out.println("hello"); System.out.println(i); } }
示例一、 比较2个整型变量的大小
package pb.test;
public class test4 { public static void main(String[] args) { int x = 3; int y = 10; //定义2个整型变量,x,y System.out.println("=======开始比较======="); if(x>y){ System.out.println("x比y大!"); } if(x<y){ System.out.println("x小于y!"); } if(x==y){ System.out.println("x等于y!"); } System.out.println("=======比较完成======="); } }
3.2、if...else语句--双分支结构
if (判断条件){
示例二、判断一个数字是奇数还是偶数
当if中的条件为true,执行if的执行体
当if中的条件为false,执行else的执行体
package pb.test; public class test5 { public static void main(String[] args) { int x=3; //定义大中型变量x if(x%2==0){ //如果余数为0则是偶数 System.out.println("x是偶数"); }else{ //如果余数不为0则是奇数 System.out.println("x是奇数"); } } }
3.3、if…else if…else语句 --多分支结构 (多条件判断效率比较高)
如果需要在if..else里判断多个条件时,就需要if..else if … else语句了,其格式如下:
/* if else if else 语句 适合在程序中,实现多条件的判断 编写格式: if(条件){ if 执行体 }else if(条件){ if 执行体 }else if(条件){ if 执行体 }else{ else的执行体 } 当if中的条件是true,执行if执行体 if中的条件是false,执行else执行体 一个语句中,包含多个 if , 只要有1个if的条件是true,其他的代码,不在执行 */
示例四、
package pb.test; public class test6 { public static void main(String[] args) { int x=3; if(x==1){ System.out.println("x的值是1!"); }else if(x==2){ System.out.println("x的值是2!"); }else if(x==3){ System.out.println("x的值是3!"); }else{ System.out.println("x的值不是1,2,3 中的一个!"); } } }
if…else if…else语句用于对多个条件进行判断,进行多种不同的处理。例如,对一个学生的考试成绩进行等级的划分,如果分数大于80分等级为优,否则,如果分数大于70分等级为良,
否则,如果分数大于60分等级为中,否则,等级为差。if…else if…else语句具体语法格式如下:
if (判断条件1) {
执行语句1
} else if (判断条件2) {
执行语句2
}
...
else if (判断条件n) {
执行语句n
} else {
执行语句n+1
}
上述格式中,判断条件是一个布尔值。当判断条件1为true时,if后面{}中的执行语句1会执行。当判断条件1为false时,会继续执行判断条件2,如果为true则执行语句2,以此类推,如果所有的判断条件都为false,则意味着所有条件均未满足,else后面{}中的执行语句n+1会执行。if…else if…else语句的执行流程如下图所示。
图1-1 if…else if…else语句的流程图
接下来通过一段代码,来实现对学生考试成绩进行等级划分的程序,IfDemo03.java
// 当if中的条件是true,执行if执行体 //if中的条件是false,执行else执行体 // 一个语句中,包含多个 if , 只要有1个if的条件是true,其他的代码,不在执行
public class IfDemo03 { public static void main(String[] args) { int grade = 75; // 定义学生成绩 if (grade > 80) { // 满足条件 grade > 80 System.out.println("该成绩的等级为优"); } else if (grade > 70) { // 不满足条件 grade > 80 ,但满足条件 grade > 70 System.out.println("该成绩的等级为良"); } else if (grade > 60) { // 不满足条件 grade > 70 ,但满足条件 grade > 60 System.out.println("该成绩的等级为中"); } else { // 不满足条件 grade > 60 System.out.println("该成绩的等级为差"); }
} }
上述代码中,定义了学生成绩grade为75。它不满足第一个判断条件grade>80,会执行第二个判断条件grade>70,条件成立,因此会打印“该成绩的等级为良”。
上面的代码也可以使用if 语句来实现但是效率低下如下代码所示
/* 执行效率低 if( grade > 80){ //优 } if( grade > 70 && grade < 80){ //良 } if( grade > 60){ //中 }*/
3.4、三目运算符
使用三目运算符时,操作数有3个,其格式如下:
例如求两个数x、y中的较大者,如果用if…else语句来实现,具体代码如下:
int x = 0; int y = 1; int max; if (x > y) { max = x; } else { max = y; }
上面的代码运行之后,变量max的值为1。其中3-8行的代码可以使用下面的三元运算来替换。
int max = x > y ? x : y;
实例二
/* if语句和三元运算符的替换 要求: 已经知道两个数,计算最大值 两个整数,比较大小 使用if还是三元 判断条件多,使用if 三元,必须有结果的, if 可以没有结果的 */ public class IfElseDemo_1{ public static void main(String[] args){ int i = 15; int j = 6; //使用if语句,判断出最大值 if(i>j){ System.out.println(i+" 是最大值"); }else{ System.out.println(j+" 是最大值"); } //使用三元运算实现 int k = i>j ? i : j; System.out.println(k+" 是最大值"); } }
示例三、求出2个数字中的最大值
public static void main(String[] args) { //定义变量来保存最大值 int max=0; //定义2个变量 int x=3; int y=10; //使用3目运算判断如果x>y则,max=x,否则max=y; max=x>y?x:y; System.out.println("max为: "+max); }
四、Switch结构
要在许多的选择条件中找到并执行其中一个符合判断条件的语句时,除了可以使用if..else不断地判断之外,也可以使用另一种更方便的方式即多重选择——switch语句,语法格式:
switch (表达式){
1.switch-case注意事项:
switch(A),括号中A的取值只能是整型或者可以转换为整型的数值类型,比如byte、short、int、char、还有枚举;需要强调的是:long和String类型是不能作用在switch语句上的。
case B:C;case是常量表达式,也就是说B的取值只能是常量(需要定义一个final型的常量,后面会详细介绍原因)或者int、byte、short、char(比如1、2、3、200000000000(注意了这是整型)),如果你需要在此处写一个表达式或者变量,那么就要加上单引号; case后的语句可以不用大括号,就是C不需要用大括号包裹着;
default就是如果没有符合的case就执行它,default并不是必须的.
标准类型
示例五、判断学生成绩,并给于评分,90~100分,A级大于80分,B级,大于70分,输出C级,大于60分,D级,低于60分输出E级
package pb.test; public class test7 { public static void main(String[] args) { int score = 75; //声明学生分数 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级"); break; } } }
结果:C级
还是上面的如果不加break;就会出现穿透现象
如果没有break语句,那么就会从表达式的值相匹配的case标签处开始执行,一直执行到switch语句的末尾,
这种从其中的一个case处开始,忽略后面的值的匹配,直接运行case的内容的现象就是穿透的现象。
package pb.test; public class test7 { public static void main(String[] args) { int score = 75; //声明学生分数 switch (score/10){ case 10: case 9: System.out.println("A级"); case 8: System.out.println("B级"); case 7: System.out.println("C级"); case 6: System.out.println("D级"); default: System.out.println("E级"); } } }
结果:C级,D级,E级