一般来说程序的结构有顺序结构、选择结构和循环结构3种,这三种不同的结构有一个共同的特点,他们只有一个入口,也只有一个出口。单一入出口让程序易读、易维护、易调试。
- 顺序结构:程序至上而下逐一执行,一条语句执行完之后继续执行下一条语句,一直到程序的末尾,如图所示:
- 选择结构:选择结构就是根据条件的成立与否决定要执行哪些语句一种结构:如图所示:
- 循环结构:循环结构就是根据判断条件的成立与否决定程序段落的执行次数,这个程序段落就称为循环体,如图所示:
选择结构
选择结构包括if、if…else及switch语句,程序加上选择结构后,就像增加了“十字路口”一样,根据不同的选择,程序的运行就会有不同结果。
if语句
if语句语法:
if(判断条件){
语句1;
……
}
如果在if语句主体中要处理的语句只有一个,则可省略左右大括号。当判断条件的值满足时(true),就会逐一执行大括号里面的语句。if的流程控制图:
if语句的执行步骤:
(1) 对表达式的结果进行判断
(2) 如果表达式结果为真,则执行语句
(3) 如果表达式结果为假,则跳过该语句
实例1:
package com.qwy;public class Demo01 {
public static void main(String[] args) {
int x=3;int y=4;System.out.println("*********开始比较**********");if(x>y){
System.out.println("x比y大");}if(x<y){
System.out.println("x比y小");}System.out.println("*********结束比较**********");}
}
执行结果:
开始比较*
x比y小
结束比较*
if…else…语句
语法结构:
if(判断条件){
语句主体1;
}else{
语句主体2;
}
当程序中存在分支的判断语句时,就可以用if…else语句进行处理,当判断条件成立时,执行if语句主体,判断条件不成立时,执行else后面的语句主体,if…else的流程控制图示:
实例2:
package com.qwy;public class Demo02 {
public static void main(String[] args) {
int num = 3;if (num % 2 == 1) {
System.out.println("nums是奇数");} else {
System.out.println("num是偶数");}}
}
运行结果:
nums是奇数
三目运算符(三元运算符)
有一种运算符可以等价于使用if…else进行变量赋值的语句,即三目运算符:其格式:变量=判断条件?表达式1:表达式2。
实例3:
package com.qwy;public class Demo03 {
public static void main(String[] args) {
int max = 0;int x = 2;int y = 4;max = x > y ? x : y;System.out.println(max);}
}
运行结果:
4
从运行结果,使用三目运算符的编写更为简洁,他用一个语句就可以代替一长串的if…else。
if…else if…else语句
如果需要在if…else中判断多个条件时,使用if…else if…else语句,其语法:
if(条件判断1){
语句主体1;
}else if(条件判断2){
语句主体2;
}
…//多个else if()语句
else{语句主体3}
if…else if流程控制图:
实例4:
package com.qwy;public class Demo04 {
public static void main(String[] args) {
int x = 5;if (x == 1) {
System.out.println("x的值是1");} else if (x == 2) {
System.out.println("x的值是2");} else if (x == 5) {
System.out.println("x的值是5");} else {
System.out.println("x的值不在1,2,5中");}}
}
运行结果:
x的值是5
switch语句
在众多的条件中找到并执行其中一个符合判断条件的语句时,除了使用if…else不断的判断外,还可以使用更方便的方式,即多重选择——switch语句。其语法格式:
switch(表达式){
case 选择值1: 语句主体1;
break;
case 选择值2: 语句主体2;
break;
……
case 选择值n:语句主体n;
break;
default : 语句主体;
}
switch流程控制图:
switch流程控制的执行步骤:
(一) switch语句先计算括号中的表达式,结果是数字、字符、枚举(JDK1.5之后)、字符串(JDK1.7之后)
(二) 根据表达式的值检测是否符合case后面的选择值,如果是case的选择值都不符合,则执行default所包含的语句,执行完毕即离开switch语句。
(三) 如果某个case的选择值符合表达式的结果,就会执行该case所包含的语句,一直到break语句后才离开switch语句。
(四) 若是没有在case语句之后加上break语句,则会一直执行到switch语句的尾部才离开switch语句。
(五) 若是没有定义default执行语句,则什么也不执行,直接退出switch语句。
实例5:
package com.qwy;public class Demo05 {
public static void main(String[] args) {
int x = 3;int y = 4;char oper = '-';switch (oper) {
case '+': {
System.out.println("x+y=" + (x + y));break;}case '-': {
System.out.println("x-y=" + (x - y));break;}case '*': {
System.out.println("x*y=" + (x * y));break;}case '/': {
System.out.println("x+y=" + (x / y));break;}default: {
System.out.println("未知的操作");break;}}}
}
运行结果:
x-y=-1
实例6:验证break的作用
package com.qwy;public class Demo06 {
public static void main(String[] args) {
int x=3;int y=4;char oper='-';switch (oper) {
case '+':{
System.out.println("x+y="+(x+y));//break;}case '-':{
System.out.println("x-y="+(x-y));//break;}case '*':{
System.out.println("x*y="+(x*y));//break;}case '/':{
System.out.println("x+y="+(x/y));//break;}default:{
System.out.println("未知的操作");//break;} }}
}
运行结果:
x-y=-1
x*y=12
x+y=0
未知的操作
从运行结果可以看出,在程序第一个条件满足之后,由于没有设置相应的break语句,程序从第一个满足条件的位置开始依次向下执行,直到最后一个条件执行完毕才会退出switch。