一、概述:
- 控制语句是一个程序的灵魂,我们只依靠“标识符、关键字、变量、运算符”等零散的知识点是无法进行流程控制的,无法实现一个具体的功能或业务,
- 控制语句即用来实现对程序流程的选择、循环、转向和返回等进行控制。Java语言中共有8种控制语句,可以分为四类:
- 【选择语句】if、switch;
- 【循环语句】for、while、do...while;
- 【转向语句】break、contiune;
- 【返回语句】return;
二、if选择语句编写方式:
- if ( 布尔表达式 ) { }
- if ( 布尔表达式 ) { } else { }
- if ( 布尔表达式 ) { } else if (布尔表达式 ) { } else if (布尔表达式 ) { }....
- if ( 布尔表达式 ) { } else if (布尔表达式 ) { } else if (布尔表达式 ) { } else { }
- 对于Java中的if语句来说,只要有一个分支执行,整个if语句全部结束。凡是带有else分支的,一定可以保证会有一个分支执行。
三、switch选择语句编写方式:
- switch语句中case要求的是常量,一般是不能进行逻辑判断的,
- 如果判断的都是几个常量的数据,建议采用switch语句,虽然if语句也是能实现的,但性能没switch好。
- JDK1.7之后(包括1.7在内)switch语句除了支持int类型之外,还支持String类型。
- 也就是说从Java7开始switch后面小括号中可以出现字符串。
- switch虽然只能探测int类型,但是也可以将byte,short,char类型放到小括号当中,因为这些类型会自动转换成int类型(小容量向大容量转换称为自动类型转换)。
- switch ( int / String 类型 ){
- case int / String类型 :
- java语句;
- break ;
- case int / String类型 :
- java语句;
- break ;
- case int / String类型 :
- java语句;
- break ;
- default :
- Java语句;
- }
- switch运行原理:
- 表达式c和表达式1进行比较,如果相等,则执行语句1,
- 如果不相等,表达式c和表达式2进行比较,如果相等,则执行语句2,
- 如果不相等,继续,表达式c和所有的分支表达式都不相等
- 此时default :分支“语句n+1”则执行。
四、循环语句for 表达式:
- for(初始化表达式;条件表达式;更新表达式){ 循环体 }
- for(;;){java语句}
- “初始化表达式”最先执行,并且在整个循环中只执行一次。
- “条件表达式 ”结果必须是一个布尔类型,也就是:true或false
- 执行原理:逆时针循环:初始表达式只执行一次;然后就是布尔表达式true--执行循环体---更新表达式---布尔表达式
直到更新表达式执行结束之后,再次判断条件时,条件为false,for循环终止。 - 更新表达式的作用是:控制循环的次数,如果缺失更新表达式,很有可能会导致死循环。
- 初始化表达式、条件表达式、更新表达式 其实都不是必须的!例如:下面小程序是个:死循环: for(;;){System.out.println("死循环");}
五、循环语句while 表达式:
- while(布尔表达式boolean){ 循环体 }
- while循环的循环次数是:0~n次。本质上while循环和for循环原理是相同的。
六、循环语句do...while 表达式:
- do{ }while( );do..while循环语句最终有一个分号;
- 循环次数:1——n次(至少执行一次)
- 先执行循环体当中的代码,执行一次循环体之后,判断布尔表达式的结果,如果为true,则继续执行循环体,如果为false循环结束。
示例:do..while循环:业务背景:我们通常在使用的一个系统的时候需要登录,假设用户名或者密码记不清楚了,你是不是需要不断的“反复的”输入用户名和密码,这就是一个非常典型的循环案例,而这个循环当中首先要做的第一件事儿不是判断用户名和密码是否正确,它的起点是先让用户输入用户名和密码,所以这个时候我们就需要使用do..while循环来完成。请看以下代码:
java.util.Scanner scanner = new java.util.Scanner(System.in);
String username;
String password;
do{
System.out.print("用户名:");
username = scanner.next();
System.out.print("密码:");
password = scanner.next();
}while(!username.equals("admin") || !password.equals("123"));
System.out.println("登录成功,欢迎" + username + "回来!");
for:循环实现九九乘法表
public class Test{
public static void main (String [] args){
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i + "*" + j + "=" + i * j + " ");
}
System.out.println();
}
}
}
switch选择语句注意事项:
1、switch语句当中case是可以进行合并的
switch(90){
case 100 : case 90 : case 80 : case 70 :
System.out.println("闯关成功");
break;
case 60:
System.out.println("闯关失败");
break;
default :
System.out.println("出错了");
}
switch语句当中当某个分支匹配成功,则开始执行此分支当中的java语句,
当遇到当前分支中的“break;”语句,switch语句就结束了,
但是如果当前分支中没有“break;”语句,则会发生case穿透现象,
也就是说下一个分支也不再进行匹配,直接进入下一个分支执行,直到遇到“break;”为止。
char c = 'A';
switch(c){
case 'A' :
System.out.println(1);
case 'B' :
System.out.println(2);
break;
default :
System.out.println(3);
}
结果如下:
1
2
发生case 穿透现象
示例1:
从键盘接收一个数字[1-7],
当数字是1~5的时候,控制台输出工作日,
当数字是6~7的时候,控制台输出休息日,
其他数字提示错误信息。
java.util.Scanner in = new java.util.Scanner(System.in);
System.out.print("请输入[1-7]的整数数字:");
int dayOfWeek = in.nextInt();
switch(dayOfWeek){
case 1: case 2: case 3: case 4: case 5:
System.out.println("今天是工作日哦!");
break;
case 6:case 7:
System.out.println("今天是休息日哦!");
break;
default :
System.out.println("对不起,您的输入有误");
}