控制流语句可以程序的执行流程,实现对程序流程的 选择、循环、转向 和 返回 等进行控制
1、顺序结构
顺序结构即根据代码的书写顺序进行执行的结构,但不书写任何控制流语句时,就通过代码的代码的前后顺序自上而下的进行执行代码。
2、分支结构
分支结构即需要通过判断进行选择性执行的语句
2.1 if
结构:if(关系表达式){
语句体
}
if(关系表达式){
语句体;
}
判断关系表达式是否为true,如果是true则执行语句体,是false则不执行语句体
2.2 if-else
结构:
if(关系表达式){
语句体1
}else{
语句体2
}
当关系表达式成立时,执行语句体1,当关系表达式不成立时执行语句体2
2.3 if - else if - else
结构:
if(关系表达式1){
语句体1
}else if(关系表达式2){
语句体2
}else{
语句体3
}
当关系表达式1成立时张执行语句体1,不执行语句体2、语句体3
当关系表达式1不成立,关系表达式2成立时,执行语句体2,不执行语句体1和语句体3
当关系表达式1和2都不成立时,执行语句体3,不执行语句体1和2
2.4 switch-case
结构:
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
…
default:
语句体n+1;
[break;]
}
根据判断switch里表达式(可以是byte、short、int、char、String、枚举等类型)的值当与case的值相等时执行对应的语句体。
注意:如只需执行一个语句体,需在语句体后加“break”,否则会顺序判断后面的case语句,执行对应的语句体
3、循环结构
当我们需要重复的运行同一部分代码从而实现功能时可以通过循环结构去实现
3.1 for循环
结构:
for (初始化语句;条件判断语句;条件控制语句) {
循环体语句;
}
例:输出十个☆
public class Test02 {
public static void main(String[] args) {
for(int i=0;i<10;i++){
System.out.print("☆");
}
}
}
注意:在for循环中的i只是局部变量只在循环体中生效
例:该代码无法运行,会编译出错
public class Test02 {
public static void main(String[] args) {
for(int i = 0; i < 3; i++) {
System.out.print(i);
}
System.out.print(i); //编译错误!!i是局部变量,在for循环里面定义,只在for循环里面生效
}
}
3.2 while循环
格式:
初始化语句;
while (条件判断语句) {
循环体语句;条件控制语句;
}
while循环的条件判断语句必须先在while语句前进行初始化
例:计算3000需要除以2的几次方可以小于5
public class Test3 {
public static void main(String[] args) {
int length = 3000;
int count = 0;
while (length>=5){
length/=2;
count++;
}
System.out.println(count);
}
}
3.3 do-while循环
格式:
初始化语句;
do {
循环体语句;
条件控制语句;
}while(条件判断语句)
使用do-while循环至少会执行一次循环体,先执行后判断
3.4 三种循环的区别
for循环和while循环先判断条件是否成立,然后在决定是否执行循环体(先判断后执行)
do-while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
3.5 循环的嵌套
有时候一个循环时解决不了问题的,这个时候就需要循环的嵌套功能去实现
例:输入高度,输出直角三角形。如:输入5, 将输出如下图形
#
##
###
####
#####
这个时候我们就需要使用循环的嵌套来解决这个问题,定义两个循环变量,一个用来控制高度,另一个用来控制输出个数
public class Test23 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入三角形的高度:");
int h = sc.nextInt();
for (int i=1 ; i<=h ; i++){
for (int j=1 ; j<=i ; j++){
System.out.print("#");
}
System.out.print("\n");
}
}
}
3.6 break和continue的使用
除了使用循环判断语句退出循环外还可以使用break和continue这两个关键字进行退出循环,但二者的用法有所区别
例:使用break
public class Test04 {
public static void main(String[] args) {
for(int i = 0; i < 10; i++) {
if (i == 3) {
break;
}
System.out.print(i+"\t");
}
}
}
输出结果为:
0 1 2
使用continue:
public class Test02 {
public static void main(String[] args) {
for(int i = 0; i < 10; i++) {
if (i == 3) {
continue;
}
System.out.print(i+"\t");
}
}
}
输出结果为:
0 1 2 4 5 6 7 8 9
通过上面的实例可以看出break和continue的区别 :
使用continue时会跳出本次循环:不执行continue后面的语句,判断下一次循环是否执行
使用break时会直接跳出循环:不执行break后面的语句,也不需要执行循环判断语句,直接退出循环