一、顺序控制
二、分支控制
(一)单分支
(二)双分支
(三)多分支
(四)嵌套分支
(五)switch分支结构
(六)if和switch的选择
三、循环控制
(一)for循环
(二)while循环
(三)do while循环
(四)多重循环控制
(五)跳转控制语句-break
(六)跳转控制语句-continue
(七)跳转控制语句-return
一、顺序控制
程序从上到下逐行地执行,中间没有任何判断和跳转。
二、分支控制
让程序有选择的执行。
(一)单分支
基本语法:
if(条件表达式){
执行代码块;
}
说明:当条件表达式为true时,就会执行{}的代码;如果为false就不执行。
import java.util.Scanner; //表示把java.util下的Scanner类导入public class If01{public static void main(String[] args){Scanner myScanner = new Scanner(System.in);System.out.print("请输入年龄:");int age = myScanner.nextInt(); //接收用户输入intif(age > 18){System.out.println("你年龄大于18,要对自己的行为负责");}System.out.println("程序继续...");}
}
(二)双分支
基本语法:
if(条件表达式){
执行代码块1;
}else{
执行代码块2;
}
说明:当条件表达式为true时,就会执行代码块1,否则执行代码块2。
import java.util.Scanner; //表示把java.util下的Scanner类导入public class If02{public static void main(String[] args){Scanner myScanner = new Scanner(System.in);System.out.print("请输入年龄:");int age = myScanner.nextInt(); //接收用户输入intif(age > 18){System.out.println("你年龄大于18,要对自己的行为负责");}else{System.out.println("你的年龄不大,这次放过你了");}System.out.println("程序继续...");}
}
(三)多分支
基本语法:
if(条件表达式1){
执行代码块1;
}else if(条件表达式2){
执行代码块2;
}
......
else{
执行代码块n;
}
注意:多分支可以没有else,如果所有的条件表达式都不成立,则一个执行入口都没有
import java.util.Scanner; public class If03{public static void main(String[] args){Scanner myScanner = new Scanner(System.in);System.out.print("请输入芝麻信用分:");int grade = myScanner.nextInt(); // 数据正确性验证if(grade >= 1 && grade <=100){if(grade == 100){System.out.println("信用极好");}else if(grade >80 && grade <= 99){System.out.println("信用优秀");}else if(grade >=60 && grade <= 80){System.out.println("信用一般");}else{System.out.println("信用不及格");}}else{System.out.println("信用分需要在1-100,请重新输入:)");}}
}
(四)嵌套分支
在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支结构称为内层分支,外面的分支结构称为外层分支。规范:不要超过3层(可读性不好)。
基本语法:
if(){
if(){
}else{
}
}
import java.util.Scanner; public class If04{public static void main(String[] args){Scanner myScanner = new Scanner(System.in);System.out.print("请输入该歌手的初赛成绩:");double score = myScanner.nextDouble(); // 数据正确性验证if(score >= 0 && score <=10){if(score > 8.0){System.out.print("请输入性别:");char sex = myScanner.next().charAt(0); if(sex == '男'){System.out.println("恭喜进入复赛男子组");}else if(sex == '女'){System.out.println("恭喜进入复赛女子组");}else{System.out.println("性别输入有误,请重新输入:)");}}else{System.out.println("不好意思,你被淘汰了");}}else{System.out.println("初赛成绩需要在0-10,请重新输入:)");}}
}
(五)switch分支结构
基本语法:
switch(表达式){
case 常量1: 语句块1;break;
case 常量2: 语句块2;break;
......
case 常量n: 语句块n;break;
default:default语句块;break;
}
1、switch关键字,表示switch分支
2、表达式对应一个值
3、case 常量1:当表达式等于常量1,就执行语句块1
4、break:表示退出switch
5、如果和case 常量1匹配,就执行语句块1,如果没有匹配,就继续匹配case 常量2
6、如果一个都没有匹配上,执行default
import java.util.Scanner; public class Switch01{public static void main(String[] args){Scanner myScanner = new Scanner(System.in);System.out.print("请输入一个字符(a-g):");char ch = myScanner.next().charAt(0);switch(ch){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("输入的字符不正确,没有匹配");break;} }
}
细节:
1、表达式数据类型,应和case后的常量类型一致,或者是可以自动转成可以相互比较的,比如输入的字符是字符,而常量是int
2、switch(表达式)中表达式的返回值必须是:byte,short,int,char,enum(枚举),String
3、case子句中的值必须是常量或常量表达式,而不能是变量
4、default子句是可选的,当没有匹配的case时,执行default
5、break语句用来在执行完一个case分支后使程序跳出switch语句块。如果没有写break,程序会顺序执行到switch结尾,除非遇到break。(穿透)
import java.util.Scanner; public class Switch04{public static void main(String[] args){// 根据用于指定月份,打印该月份所属季节。3,4,5春季 6,7,8夏季 9,10,11秋季 12,1,2,冬季Scanner myScanner = new Scanner(System.in);System.out.print("请输入月份(0-12):");int month = myScanner.nextInt();switch(month){case 3:case 4:case 5:System.out.println("春季");break;case 6:case 7:case 8:System.out.println("夏季");break;case 9:case 10:case 11:System.out.println("秋季");break;case 12:case 1:case 2:System.out.println("冬季");break;default:System.out.println("输入的月份不正确");break;} }
}
(六)if和switch的选择
1、如果判断的具体数值不多,而且符合byte,short,int,char,enum,String这6种类型。虽然两个语句都可以使用,建议使用switch语句。
2、其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。
三、循环控制
(一)for循环
基本语法:
for(循环变量初始化;循环条件;循环变量迭代){
循环操作;
}
1、for关键字,表示循环控制
2、for有四要素:(1)循环变量初始化(2)循环条件(3)循环操作(4)循环变量迭代
3、循环操作,这里可以有多条语句,也就是我们要循环执行的代码
细节:
1、循环条件是返回一个布尔值的表达式
2、for(;循环判断条件;)中的初始化和变量迭代可以写到其他地方,但是两边的分号不能省略
3、循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。
import java.util.Scanner;
public class For01{public static void main(String[] args){// 1-100中能被num整除的数的个数、和Scanner myScanner = new Scanner(System.in);int num = myScanner.nextInt();int start = 1;int end = 100;int count = 0;int sum = 0;for(int i = start; i <= end; i++){if(i % num == 0){count++;sum += i;}}System.out.println("count=" + count + ",sum=" + sum);}
}
// 输出小写的a-z以及大写的A-Z
public class Homework07{public static void main(String[] args){for(char i = 'a'; i <= 'z'; i++){System.out.print(i + " ");}System.out.println();for(char i = 'A'; i <= 'Z'; i++){System.out.print(i + " ");}}
}
(二)while循环
基本语法:
while(循环条件){
循环体(语句);
循环变量迭代;
};
说明:while循环也有四要素(循环变量初始化、循环条件、循环操作、循环变量迭代),只是四要素放的位置不一样。
细节:1、循环条件是返回一个布尔值的表达式 2、while循环是先判断再执行语句
import java.util.Scanner;
public class While01{public static void main(String[] args){// 1-100中所有能被num整除的数Scanner myScanner = new Scanner(System.in);int num = myScanner.nextInt();int end = 100;int i = 1;while(i <= end){if(i % num == 0){System.out.println(i);}i++;}}
}
(三)do while循环
基本语法:
do{
循环体(语句);
循环变量迭代;
}while(循环条件);
说明:先执行再判断,至少执行一次
public class DoWhile02{public static void main(String[] args){// 统计1-200中能被5整除但不能被3整除的数的个数int end = 200;int i = 1;int count = 0;do{if(i % 5 == 0 && i % 3 != 0){count++;}i++;}while(i <= end);System.out.println("count=" + count);}
}
(四)多重循环控制
1、将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for,while,do..while均可以作为外层循环和内层循环。(建议一般使用两层,最多不要超过3层,否则代码的可读性很差)
2、实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。
3、设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。
九九乘法表:
public class MulFor02{public static void main(String[] args){for(int i = 1; i <= 9; i++){for(int j = 1; j <= i; j++){System.out.print(j + "*" + i + "=" + j * i + '\t');}System.out.println('\n');}}
}
(五)跳转控制语句-break
break语句用于终止某个语句块的执行,一般使用在switch或者循环中。
注意事项和说明:
1、break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块
2、标签的基本使用:
label1:{ ......
label2: {......
label3: { ......
break label2;
......
}
}
}
(1)break语句可以指定退出哪层
(2)label1是标签,由程序员指定
(3)break后指定到哪个label就退出到哪里
(4)实际开发中,尽量不要使用标签
(5)如果没有指定break,默认退出最近的循环体
public class Break01{public static void main(String[] args){label1:for(int i = 0; i < 4; i++){label2:for(int j = 0; j < 10; j++){if(j == 2){break label1;}System.out.println("j = " + j);}}}
}
(六)跳转控制语句-continue
1、continue语句用于结束本次循环,继续执行下一次循环
2、continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环,这个和前面的标签的使用规则一样。
public class Continue01{public static void main(String[] args){label1:for(int i = 0; i < 4; i++){label2:for(int j = 0; j < 10; j++){if(j == 2){// continue; //等价于continue label2// continue label2;continue label1;}System.out.println("j = " + j);}}}
}
(七)跳转控制语句-return
return使用在方法,表示跳出所在的方法。如果return写在main方法,退出程序。
public class Return01{public static void main(String[] args){for(int i = 1; i <= 5; i++){if(i == 3){System.out.println("hello" + i);return;}System.out.println("hello world!");}System.out.println("go on...");}
}