控制结构
顺序
程序从上到下逐行执行,中间没有任何判断和跳转。
分支(if ,else ,switch)
让程序有选择的执行,分支控制有三种
1.单分支
if(条件表达式){ • 执行代码块;//可以有多条语句 }
import java.util.Scanner;
public class Input {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入年龄:");
int age = scanner.nextInt();
if(age > 18){
System.out.println("你的年龄大于18,要为自己的行为负责。");
}
System.out.println("程序继续");
}
}
2.双分支
if(条件表达式){ • 执行代码块1; } else{ • 执行代码块2; }
import java.util.Scanner;
public class Input {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入年龄:");
int age = scanner.nextInt();
if(age > 18){
System.out.println("你的年龄大于18,要为自己的行为负责。");
}
else {
System.out.println("放过你了");
}
System.out.println("程序继续");
}
}
3.多分支
特别说明:
1.多分支可以没有else,如果前面的所有表达式都不成立,则一个执行入口都没有;
2.如果有else,如果前面的所有表达式都不成立,则默认执行else代码块;
if(条件表达式1){ • 执行代码块1; }else if(条件表达式2){ • 执行代码块2; } ...... else{ • 执行代码n; }
嵌套分支
在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支,外面的分支结构称为外层分支。(一般不要超过三层,可读性不好)
if(){ • if(){ • //if-else... }else{ • //if-else • } }
switch分支
switch(表达式){ case 常量1: 语句块1; break; case 常量2: 语句块2; break; ... case 常量n: 语句块n; break; default; default语句块; break; }
switch细节:
1.表达式数据类型,应和case后的常量类型一致,或者是可以自动跳转成可以相互比较的类型,比如输入的是字符,而常量是int;
2.switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enum[枚举],String)
3.case子句中的值必须是常量,而不能是变量
4.default子句是可选的,当没有匹配的case时,执行default,如果没有default子句,也没有任何常量匹配,则没有输出;
5.break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有写break,程序会顺序执行到switch结尾,除非执行到break;
//细节1
public class Input {
public static void main(String[] args){
char c1 = 'a';
switch (c1){
case 'a':
System.out.println("ok1");
break;
case 'b':
System.out.println("ok2");
break;
default:
System.out.println("ok3");
}
}
}
//细节2
char c = 'a';
switch (c){
case 'a':
System.out.println("ok1");
break;
case 'b':
System.out.println("ok2");
break;
default:
System.out.println("ok3");
※循环(for,while,do while,多重循环)
for循环控制
for(循环变量初始值;循环条件;循环迭代变量){ 循环操作语句;//可以有多条 }
1.for关键字,表示循环控制
2.for有四要素
(1)循环变量初始值
(2)循环条件
(3)循环操作
(4)循环变量迭代
3.循环操作,这里可以有多条语句,也就是我们要循环执行的代码
4.如果循环操作只有一条语句,可以省略{},建议不要省略
for循环细节
1.循环条件是返回一个布尔值的表达式
2.for(;循环判断条件;)中的初始化和变量迭代可以写到其他地方,但是两边的分号不能省略
3.循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开;
//细节2
int i = 1;
for (;i<=10;){
System.out.println("韩顺平教育"+i);
i++;
}
//
int i = 1;
for (;i<=10;){
System.out.println("韩顺平教育"+i);
i++;
}
System.out.println(i);//i=11
//补充
for(;;){
//表示一个无限循环,死循环
System.out.println("ok~");
}
while循环控制
基本语法:while循环也有四要素,只是存放位置和for不一样
循环变量初始化; while(循环条件){ 循环体(语句); 循环变量迭代; }
注意事项:
1.循环条件是返回一个布尔值的表达式
2.while循环是先判断再执行语句
public class Input {
public static void main(String[] args){
int i = 1;//循环变量初始化
while (i <= 10){//循环条件
System.out.println("韩顺平教育"+i);//执行语句
i++;//循环变量迭代
}
}
}
do...while循环控制
循环变量初始化; do{ 循环体(语句); 循环变量迭代; }while(循环条件);
说明:
1.do while是关键字
2.也有循环四要素,只是位置不一样
3.先执行再判断也就是说一定会执行一次
4.最后有一个分号
5.while和do...while区别、
注意事项:
1.循环条件是返回一个布尔值的表达式
2.do...while循环时先执行,再判断,因此它至少执行一次
多重循环控制
1.将一个循环放在另一个循环体内,就形成了嵌套循环。其中for,while,do...while均可作为外层循环和内层循环。【一般建议使用两层,最多不要超过3层】
2.实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当此循环,开始下一次的循环。
3.设外层循环次数为m次,内层为n次,则内层循环实际上需要执行m*n次。
break
break语句用于终止某个语句块的执行,一般使用在switch或者循环中
基本语法
{ ...... break; ...... }
以while为例
注意事项
1.break语句出现在多层嵌套的语句块中,可以通过标签指明要终止的是哪一层语句块
2.标签的基本使用:
label1:{......
label2: {......
label3: { ......
break label2;
......
}
}
}
(1).break语句可以指定退出哪层
(2).label1是标签,由程序员指定
(3).break后指定到哪个label就退出到哪里
(4).在实际的开发中,尽量不要使用标签
(5).如果没有指定break,默认退出最近的循环体
public class Input {
public static void main(String[] args){
label1:
for (int j=0;j<4;j++){//外层for
label2:
for (int i=0;i<10;i++){//内层for
if (i==2){
break;//等价于break label2
}
System.out.println("i="+i);
}
}
}
}
continue
1.continue语句用于结束本次循环,继续执行下一次循环
2.continue语句出现在多层嵌套的循环语句体中,可以通过标签指明要跳过的是哪一层循环
基本语法
{
......
continue;
......
}
return
return表示跳出所在的方法,如果return写在main方法中,退出程序