流程控制语句结构分为:
1、顺序结构:从上到下依次执行
2、分支结构:多个分支选择其中一个分支执行
3、循环结构:重复执行某些代码
执行过程:从上到下顺序执行
1、System.out.print(输出内容); 输出内容后不换行
2、System.out.println(输出内容); 输出内容后换行
#输出常量 System.out.print(1); System.out.print('尚'); System.out.print(44.4); System.out.print(true); System.out.print("尚硅谷");
#输出变量 int a = 1; char c = '北'; double d = 44.2; boolean b = true; String school = "北大"; System.out.print(a); System.out.print(c); System.out.print(d); System.out.print(b); System.out.print(school);
#输出拼接结果 System.out.print("a = " + a); System.out.print("c = " + c); System.out.print("d = " + d); System.out.print("b = " + b); System.out.print("school = " + school);
键盘输入代码的三个步骤:
1、准备Scanner类型的变量
2、提示输入xxx
3、接收输入内容
示例代码:
//1、准备Scanner类型的变量
import java.util.Scanner; Scanner input = new Scanner(System.in);//System.in代表键盘输入
//2、提示输入xx System.out.print("请输入一个整数:");
//3、接收输入内容 int num = input.nextInt();
//列出各种数据类型的输入 int num = input.nextInt(); long bigNum = input.nextLong(); double d = input.nextDouble(); boolean b = input.nextBoolean(); String s = input.next(); char c = input.next().charAt(0);//先按照字符串接收,然后再取字符串的第一个字符(下标为0)
分支结构:根据条件选择性的执行某些代码
分为:
1、条件判断:if...else系列
2、选择结构:switch...case系列
if(条件表达式){ 当条件表达式成立时需要执行的语句块; }
执行过程:
条件成立,就执行{}其中的语句块,不成立就不执行。
注意:
(1)if(条件表达式)中的条件表达式的结果必须是boolean类型
(2)当{}中的语句只有一个语句(简单的语句,也可以是一个复合语句)时,可以省略{}
//省略{}的情况 if(score<0 || score>100) System.out.println("输入有误!");//简单的语句 else //复合语句 if(score==100){ System.out.println("满分"); }else if(score>=80){ System.out.println("优秀"); }else if(score>=60){ System.out.println("及格"); }else{ System.out.println("不及格"); }
示例代码:
int year = 2020; int day = 26; if(year%4==0 && year0!=0 || year@0==0){ day = 29; }
双分支结构
语法格式:
if(条件表达式){ 当条件表达式成立(true)时需要执行的语句块1; }else{ 当条件表达式不成立(false)时需要执行的语句块2; }
执行过程:
当条件表达式成立(true)时执行语句块1,否则执行语句块2
注意:
(1)if(条件表达式)中的条件表达式的结果必须是boolean类型
(2)当{}中的语句只有一个语句(简单的语句,也可以是一个复合语句)时,可以省略{}
示例代码:
int num = 15; if(num%2==0){ System.out.println(num + "是偶数"); }else{ System.out.println(num + "是奇数"); }
多分支结构
语法格式:
if(条件表达式1){ 当条件表达式1成立的时候,执行的语句块1; }else if(条件表达式2){ 当条件表达式1不成立, 条件表达式2成立的时候,执行的语句块2; }else if(条件表达式3){ 当条件表达式1不成立, 条件表达式2也不成立, 条件表达式3成立的时候,执行的语句块3; }else{ 当以上所有的条件表达式都不成立,需要执行的语句块n+1; }
执行过程:
(1)多个条件顺序往下判断,如果上面有一个条件成立了,下面的条件就不看了
(2)多个分支也只会执行其中的一个
注意:
(1)每一个条件表达式都必须是boolean值
(2)当{}中只有一个语句时,也可以省略{},但不建议省略
(3)当多个条件是“互斥”关系(没有重叠部分),顺序可以随意;当多个条件是“包含”关系(有重叠部分),顺序不能随意,小的在上,大的在下面.
示例代码:
int score = 88; if(score==100){ System.out.println("满分"); }else if(score>=80){ System.out.println("优秀"); }else if(score>=60){ System.out.println("及格"); }else{ System.out.println("不及格"); }
嵌套
执行过程:
当嵌套在if中,就是当外面的if成立时,才会看里面的条件判断;
当嵌套在else中,就当外面的else满足时,才会看里面的条件判断;
语法格式:
switch(表达式){ case 常量值1: 语句块1; break; case 常量值2: 语句块2; break; ......... default: 语句块n+1; break; }
执行过程:
(1)入口
①当switch(表达式)的值与case后面的某个常量值匹配,就从这个case进入;
②当switch(表达式)的值与case后面的所有常量值都不匹配,寻找default分支进入;
(2)一旦从“入口”进入switch,就会顺序往下执行,直到遇到“出口”
(3)出口
①自然出口:遇到了switch的结束}
②中断出口:遇到了break等
注意:
(1)switch(表达式)的值的类型,只能是:4种基本数据类型,两种引用数据类型
(2)case后面必须是常量值,而且不能重复
循环结构:
“重复”执行某些代码
循环结构的分类:
1、for循环
2、while循环
3、do...while循环
语法格式:
for(;;){ 循环体语句块; if(条件表达式){ break; } } for(初始化表达式; 循环条件; 迭代表达式){ 循环体语句块; }
执行过程:
(1)初始化表达式;
(2)判断循环条件;
(3)如果循环条件成立,先执行循环体语句块;然后执行迭代表达式,再回到(2)...
(4)如果循环条件不成立,会结束for;
或者在当前循环中遇到break语句,也会结束当前for循环;
注意:
(1)for(;;)中的两个;不能多也不能少
(2)循环条件必须是boolean类型
//遍历1-100之间的偶数 for(int i=1; i<=100; i++){//每次循环的步幅是1 if(i%2==0){ System.out.println(i); } }
语法格式:
while(循环条件){ 循环体语句块; }
经典的形式: while(true){ 循环体语句块; if(条件表达式){ break; } }
执行过程:
(1)先判断循环条件
(2)如果循环条件成立,就执行循环体语句块;然后回到(1)
(3)如果循环条件不成立,就结束while循环;
如果在循环体语句块中,遇到break,也会结束while循环;
注意:(1)while(循环条件)中循环条件必须是boolean类型
示例代码:
//遍历1-100之间的偶数 int num = 2; while(num<=100){ System.out.println(num); num+=2; }
语法格式:
do{ 循环体语句块; }while(循环条件);
执行过程:
(1)先执行一次循环体语句块;
(2)判断循环条件
(3)如果循环条件成立,再次执行循环体语句块;然后回到(2)...
(4)如果循环条件不成立,就结束do...while循环;
如果在循环体语句块中,遇到break,也会结束do...while循环;
注意:
(1)while(循环条件)中循环条件必须是boolean类型
(2)do{}while();最后有一个分号
(3)do...while结构的循环体语句是至少会执行一次,这个和for和while是不一样的
示例代码:
//从键盘输入整数,统计正数、负数的个数,输入0结束
import java.util.Scanner; Scanner input = new Scanner(System.in);
int num; int zheng = 0; int fu = 0; do{ System.out.print("请输入整数(0结束):"); num = input.nextInt(); if(num > 0){ zheng++; }else if(num < 0){ fu++; } }while(num!=0);
System.out.println("正数的个数:" + zheng); System.out.println("负数的个数:" + fu);
原则:三种循环之间是可以互相转换的,都能实现循环的功能
建议(习惯上):当我们次数比较明显的时候,或者说从几循环到几的时候,一般先考虑for;
当循环体语句块至少要执行一次的时候,一般先考虑do...while;
当循环条件比较明显,但是次数不明显,循环体语句块也不是至少执行一次,那么可以考虑while结构;
三种循环结构都具有四要素:
(1)循环变量的初始化表达式
(2)循环条件
(3)循环变量的修改的迭代表达式
(4)循环体语句块
1、break
用于:(1)switch结构
作用:结束switch结构
(2)循环结构
作用:结束当前循环
2、continue 只能用于循环结构
作用:提前结束本次循环,继续下一次循环