目录
1. 语句的作用
可以控制程序的执行流程
2. 语句的分类
- 顺序结构语句
- 选择结构语句
- 循环结构语句
2.1 顺序结构语句
2.1.1 概述
是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的
2.1.2 执行流程
写在前面的先执行,写在后面的后执行
顺序结构图:
2.2 选择结构语句
2.2.1 概述
也被称为分支结构。
选择结构有特定的语法规则,代码要执行具体的逻辑运算(结果为true或false)进行判断,根据结果选择执行相应的代码。
Java语言提供了两种选择结构的语句:if语句 和 switch语句。
2.2.2 if语句的三种格式
格式1:
if (关系表达式) {
语句体;
}
执行流程:
- 首先判断关系表达式,看结果值true还是false;
- 如果结果为true,就执行语句体;
- 如果结果为false,就不执行语句体。
格式1流程图:
案例1:
//导包
import java.util.Scanner;
class IfDemo1 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//控制台输出提示语句
System.out.println("请输入一个数");
//通过对象sc调用nextInt()得到int类型数据
int x = sc.nextInt();
//判断输入的数是否等于10
if (x == 10) {
System.out.println("x等于10");
}
//判断输入的数是否等于20
if (x == 20) {
System.out.println("x等于20");
}
//输出结束语句
System.out.println("OVER");
}
}
注意事项:
- 关系表达式无论简单还是复杂,结果必须是boolean类型。
- if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。
- 一般来说:有左大括号就没有分号,有分号就没有左大括号。
格式2:
if(关系表达式) {
语句体1;
}else {
语句体2;
}
执行流程:
- 首先判断关系表达式是true还是false;
- 如果是true,则执行语句体1;
- 如果是false,则执行语句体2。
格式2流程图:
案例2:键盘录入两个数,判断其是否相等
//导包
import java.util.Scanner;
class IfDemo2 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数:");
int a = sc.nextInt();
System.out.println("请输入第二个数:");
int b = sc.nextInt();
//判断两个数是否相等
if (a == b) {
System.out.println("两个数相等");
}else {
System.out.println("两个数不相等");
}
System.out.println("OVER");
}
}
if语句和三元运算的相互转换:
三元运算符实现的都可以采用if语句实现,反之不成立
当if语句体为输出语句时不能用三元运算符实现。因为三元运算符是一个运算符,运算符操作完毕应该有一个结果而不是输出
案例3:获取两个数据中的最大值
//导包
import java.util.Scanner;
class IfDemo3 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数:");
int a = sc.nextInt();
System.out.println("请输入第二个数:");
int b = sc.nextInt();
//if语句,“输出”较大值
if (a > b) {
System.out.println("较大的值是:"+a);
}else {
System.out.println("较大的值是:"+b);
}
}
}
//导包
import java.util.Scanner;
class IfDemo3 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数:");
int a = sc.nextInt();
System.out.println("请输入第二个数:");
int b = sc.nextInt();
//不能在if语句里定义max
int max;
//if语句赋值操作
if (a > b) {
max = a;
}else {
max = b;
}
System.out.println("Max="+max);
}
}
三元改进
//导包
import java.util.Scanner;
class IfDemo3 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数:");
int a = sc.nextInt();
System.out.println("请输入第二个数:");
int b = sc.nextInt();
//三元改进
int max = (a > b)?a:b;
System.out.println("Max="+max);
}
}
格式3:
if(关系表达式1) {
语句体1;
}else if(关系表达式2) {
语句体2;
}else if(关系表达式3) {
语句体3;
}
……
else {
语句体n+1;
}
执行流程
- 首先计算关系表达式1的结果是true还是false;
- 如果是true,则执行语句体1;
- 如果是false,就继续判断表达式2,看结果是true还是false;
- 如果是true,就执行语句体2;
- 否则执行关系表达式3,看结果是true还是false
- ……
- 如果没有任何一个关系表达式是true,就执行语句体n+1.
格式3流程图:
案例4:通过把学生考试成绩分等级来引出if语句的第三种格式
90-100 优秀 ; 80-90 好 ; 70-80 良 ; 60-70 及格 ; 60一下 不及格(注意正确数据、边界数据、错误数据)
//导包
import java.util.Scanner;
class IfDemo4 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生的成绩(0~100):");
int score = sc.nextInt();
//if语句
if(score >= 90 && score <= 100) {
System.out.println("优秀");
}else if(score >= 80 && score < 90) {
System.out.println("良");
}else if(score >= 70 && score < 80) {
System.out.println("好");
}else if(score >= 60 && score < 70) {
System.out.println("及格");
}else if(score >=0 && score < 60) {
System.out.println("不及格");
}else {
System.out.println("你输入的成绩有误");
}
}
}
2.2.2 switch语句
switch语句格式:
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
……
default:
语句体n+1;
break;
}
格式解释:
switch表示这是switch语句
表达式的取值:byte,short,int,char
JDK5以后可以是枚举,JDK7以后可以是String
case后面跟的是要和表达式进行比较的值
语句体部分可以是一条或多条语句
break表示中断,结束的意思,可以结束switch语句
default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
执行流程:
- 首先计算出表达式的值;
- 然后,和case依次比较,一旦有对应的值就会执行相应的语句;
- 在执行的过程中,遇到break就会结束;
- 如果所有的case都和表达式的值不匹配,就执行default语句体部分,然后程序结束。
switch语句流程图:
案例:根据键盘录入的数值1,2,3,…7输出对应的星期一,星期二,星期三…星期日。
//导包
import java.util.Scanner;
class SwitchDemo1 {
public static void main(String[] args) {
//创建录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数(1~7):");
int x = sc.nextInt();
//switch语句
switch(x) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default :
System.out.println("你输入的数字有误");
break;
}
}
}
注意事项:
- case后面的值只能是常量,并且case的值不能出现相同的;
- default可以省略(case就能将值固定的情况),但是不建议,因为它的作用是对不正确的情况给出提示;
- break可以省略(程序末尾的break可以省略),但不建议,可能出现case穿透;
- default可以出现在任意位置,建议在最后;
- switch语句的结束条件:遇到break或者 执行到程序的末尾
2.2.3 if语句和switch语句的区别
if语句使用场景:
- 针对结果是boolean类型的判断
- 针对一个范围的判断
- 针对几个常量值的判断
switch语句使用场景:
- 针对几个常量值的判断
2.3 循环结构语句
2.3.1 概述
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句。
当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。
循环语句的三种类型:for循环语句;while循环语句;do...while循环语句
2.3.2 循环语句的组成
1. 初始化语句:
- 一条或者多条语句,这些语句完成一些初始化操作。
2. 判断条件语句:
- 这是一个boolean 表达式,这个表达式能决定是否执行循环体。
3. 循环体语句:
- 这个部分是循环体语句,也就是我们要多次做的事情。
4. 控制条件语句:
- 这个部分在一次循环体结束后,下一次循环判断条件执行前执行。通过用于控制循环条件中的变量,使得循环在合适的时候结束。
2.3.3 for循环语句
for循环格式:
for(初始化语句;判断条件语句;控制条件语句) {
循环体语句;
}
执行流程:
- 首先执行初始化语句;
- 然后执行判断条件语句,看其结果是true还是false:
- 如果为false,循环结束;
- 如果为true,执行循环语句体;
- 接着执行控制条件语句;
- 回到2继续,直到条件语句结果为false,循环结束。
for循环流程图:
注意事项:
- 判断条件语句的结果是一个boolean类型
- 循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略。
- 一般来说:有左大括号就没有分号,有分号就没有左大括号
案例:
//输出1——10
class ForDemo2 {
public static void main(String[] args) {
for(int x = 1;x <= 10;x++) {
System.out.println(x);
}
}
}
//求1——10之间数的和
class ForDemo3 {
public static void main(String[] args) {
int sum = 0;
for(int i = 1;i <=10;i++) {
sum += i;
}
System.out.println(sum);
}
}
//求1——10之间偶数的和
//错误代码
class ForDemo4 {
public static void main(String[] args) {
int sum = 0;
//条件语句为false,循环直接结束输出sum=0
for(int x = 1;(x <= 10 )&& (x % 2 == 0);x++ ) {
sum += x;
}
System.out.println("sum ="+sum);//输出结果为0
}
}
//正确代码
class ForDemo4 {
public static void main(String[] args) {
int sum = 0;
for(int x = 1;x <= 10;x++) {
//注意=和==的区别
if (x%2 == 0){
sum += x;
}
}
System.out.println("sum ="+sum);//输出结果为30
}
}
//求5的阶乘
class ForDemo5 {
public static void main(String[] args) {
int n = 1;
for(int i = 1;i <=5;i++) {
n *= i;
}
System.out.println(n);
}
}
2.3.4 while循环语句
基本格式:
while(判断条件语句) {
循环体语句;
}
扩展格式:
初始化语句;
while(条件判断语句){
循环体语句;
控制条件语句;
}
while循环流程图:
案例:
//用while求1——100之和
class WhileDemo1 {
public static void main(String[] args) {
int x = 1;
int sum = 0;
while(x <= 100){
sum +=x;
x++;
}
System.out.println("sum = "+ sum);
}
}
for循环和while循环的区别
for循环语句和while循环语句可以等价转换,但还是有些小区别的
使用区别:
控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。
场景区别:
for循环适合针对一个范围判断进行操作 while循环适合判断次数不明确操作
2.3.5 do…while循环语句
基本格式:
do {
循环体语句;
}while(判断条件语句);
扩展格式:
初始化语句;
do {
循环体语句;
控制条件语句;
}while(判断条件语句);
执行流程图:
2.3.6 三种循环语句的区别及注意事项
循环语句的区别:
do…while循环至少会执行一次循环体;
而for循环和while循环只有在条件成立的时候才会去执行循环体。
注意事项:
- 优先考虑for循环,再考虑while循环,最后考虑do…while循环;
- 关于死循环——要注意控制条件语句里控制的变量问题
- 两种基本死循环格式:
- while(true){……}
- for(;;){……}
2.3.7 循环的嵌套使用
2.4 跳转控制语句
Java提供了break,continue和return来实现控制语句的跳转和中断。
2.4.1 break中断
break使用场景:
- switch语句中
- 循环语句中(循环语句中加入了if判断的情况)
break的作用:
- 跳出单层循环
- 跳出多层循环,需要标签语句的配合(格式:标签名:语句)
案例:
//break语句
class BreakDemo1 {
public static void main(String[] args) {
for(int x = 1;x <= 5;x++) {
//跳出单层循环
if(x == 3) {
break;
}
System.out.println(x);
}
System.out.println("OVER");
}
}
/*
输出结果:
1
2
OVER
*/
//break语句
class BreakDemo2 {
public static void main(String[] args) {
wc:for(int x=1;x<=3;x++) {
nc:for(int y=1;y<=5;y++){
//跳出单层循环(内循环)
if(y==3){
break nc;
}
System.out.print("*");
}
System.out.println();
}
}
}
/*
输出结果:
**
**
**
*/
//break语句
class BreakDemo2 {
public static void main(String[] args) {
wc:for(int x=1;x<=3;x++) {
nc:for(int y=1;y<=5;y++){
//跳出多层循环(外层循环)
if(y==3){
break wc;
}
System.out.print("*");
}
System.out.println();
}
}
}
/*
输出结果:
**
*/
2.4.2 continue继续
continue的使用场景:
- 循环语句中
continue的作用:
- 跳出单层循环的一次,可以继续执行下一次
案例
//continue语句
class ContinueDemo {
public static void main(String[] args) {
for(int x = 1;x <= 5;x++) {
//跳出一次循环
if(x == 3) {
continue;
}
System.out.println(x);
}
System.out.println("OVER");
}
}
/*
输出结果:
1
2
4
5
OVER
*/
与break的区别:
break直接结束循环
continue只跳一次循环,下次循环继续执行
2.4.3 return返回
return作用:用于结束方法,方法内return后的语句都不执行