分支控制
单分支
基本语法:
if(条件表达式){
执行代码块; (可以有多条语句)
}
说明:判断结果为真执行代码块,否则跳过
//例子
int a = 10;
int b = 20;
if(a < b) {
System.out.println("我比你大");
}
双分支
基本语法:
if(条件表达式){
执行代码块1;
}else{
执行代码块2;
}
说明:判断结果为真,执行代码块1,否则执行代码块2
//例子:
int age = 20;
if(age>18){
System.out.println("你的年龄大于18");
}else {
System.out.println("你的年龄小于18");
}
多分支
基本语法:
if(条件表达式){
执行代码块1;
}else if(条件表达式2){
执行代码块2;
}
…
else{
执行代码块n;
}
/*案例:判断一个人的成绩是否优秀
* 1.成绩为=100时,满分
* 2.成绩为>80时,成绩优秀
* 3.成绩为>60时,成绩一般
* 4.其他情况,输出不合格
*/
Scanner myscanner = new Scanner(System.in);
System.out.println("请输入名字");
String name = myscanner.next();
System.out.println("请输入成绩");
double achievement = myscanner.nextDouble();
if(achievement==100) {
System.out.println("满分");
}if (achievement>=80 && achievement<=99) {
System.out.println("成绩优秀");
}if (achievement>=60 && achievement<=79) {
System.out.println("成绩一般");
}if (achievement<60) {
System.out.println("不合格");
}
说明:
当条件表达式1成立时,执行代码块1
如果不成立,才去判断表达式2是否成立
如果表达式2成立,就执行代码块2
以此类推,如果所有表达式都不成立
则执行else的代码块,注意只有一个执行入口
特别说明
多分支可以没有else,如果所有的条件表达式都不成立,则执行入口都没有
如果有else,如果所有的条件表达式都不成立,则默认执行else代码块
嵌套分支
基本语法:
if(){
if(){
if-else
}else{
if-else
}
}
说明:在一个分支结构中又完整的嵌套了另一个完整的分支结构
里面的分支结构称为内层分支,外面的称为外层分支
建议:不要超过3层,可读性不好
/*例子:参见歌手大赛,如果成绩大于8.0进入决赛,否则淘汰,并且根据性别提示进入男子组
* 或女子组,输入成绩和性别,进行判断和输出
*/
Scanner myscanner = new Scanner(System.in);
System.out.println("请输入你的成绩");
double achievement = myscanner.nextDouble();
if(achievement>=8.0) {
System.out.println("请输入你的性别");
char gender = myscanner.next().charAt(0);
//先接收到字符串,再取出字符串里面的第一个字符,这个称之为接收字符的方法
if(gender == '男') {
System.out.println("进入男子组");
}else if(gender == '女'){
System.out.println("进入女子组");
}else{
System.out.println("性别有误,请重新输入");
}
}else {
System.out.println("淘汰");
}
switch 分支结构
基本语法:
switch(表达式){
case常量1:
语句块1;
break;
case常量2:
语句块2;
break;
…
case常量n:
语句块n;
break;
default;
default语句块;
break;
}
//例子
Scanner myscanner = new Scanner(System.in);
System.out.println("请输入一个字符a-g");
char c1 = myscanner.next().charAt(0);
//在java中只要是有返回值,就是一个表达式
switch(c1) {
case 'a' :
System.out.println("今天是星期一");
break;
case 'b' :
System.out.println("今天是星期二");
break;
case 'c' :
System.out.println("今天是星期三");
break;
case 'd' :
System.out.println("今天是星期四");
break;
case 'e' :
System.out.println("今天是星期五");
break;
case 'f' :
System.out.println("今天是星期六");
break;
case 'g' :
System.out.println("今天是星期日");
break;
default:
System.out.println("你输入的字符不正确,一个都没有匹配上");
}
说明:
- switch关键字,表示switch分支
- 表达式对应一个值
- case常量1:当表达式的值等于常量1,就执行语句块1
- break:表示退出switch
- 如果case和常量1匹配,就执行语句块1,如果没有匹配,就继续匹配case常量2
- 如果一个都没有匹配上,执行default
Switch细节
- 表达式数据类型,应和case后的常量类型一致,或者可以自动转换成可以相互比较的类型,比如输入的是字符,而常量是int
- switch(表达式)中的表达式的返回值必须是:(byte,short,int,char,enum{枚举}.String)
- case子句中的值必须是常量,而不能是变量
- default子句是可选的,当没有匹配的case时,执行default
- break语句用来在执行完一个case分支后使程序跳出switch语句块:如果没有写break,程序会顺序执行到switch结尾,除非遇到 break
循环控制
for循环控制
基本语法:
for(循环变量初始化;循环条件;循环变量迭代){
循环操作(语句);
}
//例子
for(int a = 0;a<=10;a++) {
System.out.println("第"+a+"次循环");
}
说明
- for关键字,表示循环控制
- for有四要素: (1)循环变量初始化 (2)循环条件 (3)循环操作 (4)循环变量迭代
- 循环操作,这里可以有多条语句
- 如果for循环操作只有一条语句,可以省略{},建议不要省略
for循环的细节
- 循环条件是返回一个布尔值的表达式
- for (;循环判断条件;) 中的初始化和变量迭代可以写到其他地方,但是两边的分号不能省略
- 循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,
- 循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开
//2.
int a = 0;//循环变量初始化
for(;a<=5;) {
System.out.println("阴阳师");
a++;
}
/*说明:如果a变量在for循环里面的话,它就只作用for循环里面,其他地方不使用
* 如果a变量在外面的话,它可以在for循环里面使用,也可由在其他地方使用
*/
//3.
int count = 3;
for(int i = 0,j = 0;i<count;i++,j+=2) {
System.out.print("i="+i+"j="+j+"\n");
}
无限死循环演示
for(;;) {
System.out.println("阴阳师");
}
while循环控制
基本语法:
循环变量初始化;
while(循环条件){
循环体(语句);
循环变量迭代;
}
//例子
int a = 1;//循环变量初始化
while(a<=10) {//循环条件
System.out.println(a+"次阴阳师");//循环体
a++;//循环变量迭代
}
System.out.println("a="+a);
说明:
- while循环也要有四要素
- 只是四要素的位置和for不一样
细节:
- 循环条件是返回一个布尔值的表达式
- while循环是先判断在执行语句
do while循环
基本语法:
循环变量初始化;
do{
循环体();
循环变量迭代;
}while(循环条件);
//例子
int a = 1;
do {
System.out.println("崩坏三"+a+"次");
a++;
}while(a<=10);
说明:
- do while是关键字
- 也有循环四要素,只是位置不一样
- 先执行,在判断,也就是说,一定会执行一次
- 最后一个有分号
- (do…while) 和 (while) 的区别在与一个先执行再判断,一个先判断再执行
细节:
循环条件是返回布尔值的表达式
do…while 循环是先执行,在判断,因此它至少执行一次
跳转控制语句
break
基本介绍:用于终止某个语句块,一般使用在switch或者循环[for,while,do-while]中
基本语法:
{…
break;
…
}
细节:
- break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块
//例子
for(int i = 0;i<=10;i++) {
if(i==3) {
break;
}//i=3的时候终止循环
System.out.println("ok"+i);
//原本是循环10次但是,中途被break截止了,所以只循环了3次
}
//标签的基本使用
lable1:
for(int a = 0;a<=5;a++) {//外层for
lable2:
for(int j = 0;j<=10;j++) {//内层for
if(j==2) {
break lable1;
}
System.out.println("j="+j);
}
}
说明:
- brake语句可以指定退出那一层
- lable1是标签,由程序员指定
- break后指定到那一个lable就退出哪里
- 实际开发中尽量不要使用标签
- 如果没有指定break,就默认退出最近的循环体
continue
基本介绍
- continue语句用于结束本次循环,继续执行下一循环
- continue语句出现多层嵌套的循环语句中时,可以通过标签指明跳到那一层循环这个和break标签的使用规则一样
基本语法:
{…
continue;
…
}
//例子
int i = 0;
while(i<=4){
i++;
if(i==2) {
continue;
}
System.out.println("i="+i);
//i=2时continue语句用于结束本次循环下面的输出不执行,开始第三次循环
}
System.out.println("=====================================");
//细节:
label1:
for(int a = 0;a<4;a++) {
label2:
for(int b = 0;b<10;b++) {
if(b==2) {
//continue; 等价于label2:
continue label1;
}
System.out.println("b="+b);
}
}
return
基本介绍:return使用在方法上,表示跳出所在的方法( 注意:如果return写在main方法里面,即退出程序)
//例子
for(int i = 1;i<=5;i++) {
if(i==3) {
System.out.println("阴阳师"+i);
//return;
//continue;
break;
}
System.out.println("Hello,world");
}
System.out.println("go...hou...mu");
解析
- 如果用return,再i=3的时候输出两次"Hello,world"和一次阴阳师并退出整个程序
- 如果用continue,再i=3的时候输出阴阳师并跳过第三遍Hello,开始第四次循环
- 如果用break,再i=3终止循环输出两次"Hello,world"和一次阴阳师和"go…hou…mu"