流程控制语句分类:
顺序结构:
普通的代码,由上而下依次执行分支结构(if, switch)
循环结构(for, while, do…while)
if语句:
格式1:
if (关系表达式) {
语句体;
}
执行流程:
- 首先计算关系表达式的值
- 如果关系表达式的值为true就执行语句体
- 如果关系表达式的值为false就不执行语句体
- 继续执行后面的语句内容
public static void main (String[]args){
System.out.println("开始");
// 如果年龄大于18岁, 就可以上网吧
int age = 17;
if (age >= 18) {
// int a = 10;
System.out.println("可以上网吧");
}
System.out.println("结束");
}
if语句格式2
if (关系表达式) {
语句体1;
} else {
语句体2;
}
执行流程:
- 首先计算关系表达式的值
- 如果关系表达式的值为true就执行语句体1
- 如果关系表达式的值为false就执行语句体2
- 继续执行后面的语句内容
//任意给出一个整数,请用程序实现判断该整数是奇数还是偶数,并在控制台输出该整数是奇数还是偶数。
public static void main (String[]args){
// 程序判断一个数, 是奇数还是偶数
int num = 9;
if (num % 2 == 0) {
System.out.println("偶数");
} else {
System.out.println("奇数");
}
}
if语句格式3
if (关系表达式1) {
语句体1;
} else if (关系表达式2) {
语句体2;
}
…
else {
语句体n+1;
}
- 首先计算关系表达式1的值
- 如果值为true就执行语句体1;如果值为false就计算关系表达式2的值
- 如果值为true就执行语句体2;如果值为false就计算关系表达式3的值
- …
- 如果没有任何关系表达式为true,就执行语句体n+1。
// 定义一个在0~100之间的变量a, 判断分数在什么范围,90 ~ 100优秀,80 ~ 89良好,70 ~ 79中等,60 ~ 69及格,0 ~ 59请努力加油!
public static void test() {
System.out.println("请输入您的分数");
Scanner scanner = new Scanner(System.in);
int score = scanner.nextInt();
if (score >= 90 && score <= 100) {
System.out.println("优秀");
} else if (score >= 80 && score <= 89) {
System.out.println("良好");
} else if (score >= 70 && score <= 79) {
System.out.println("中等");
} else if (score >= 60 && score <= 69) {
System.out.println("及格");
} else if (score >= 0 && score <= 59) {
System.out.println("请努力加油");
} else {
System.out.println("成绩有误!");
}
}
小明快要期末考试了,小明爸爸对他说,会根据他不同的考试成绩,送他不同的礼物,假如你可以控制小明的得分,请用程序实现小明到底该获得什么样的礼物,并在控制台输出。
public static void test02() {
// 1. 使用Scanner录入考试成绩
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的成绩:");
int score = sc.nextInt();
// 2. 判断成绩是否在合法范围内 0~100
if (score >= 0 && score <= 100) {
// 合法成绩
// 3. 在合法的语句块中判断成绩范围符合哪一个奖励
if (score >= 95 && score <= 100) {
System.out.println("自行车一辆");
} else if (score >= 90 && score <= 94) {
System.out.println("游乐场一次");
} else if (score >= 80 && score <= 89) {
System.out.println("变形金刚一个");
} else {
System.out.println("挨顿揍, 这座城市又多了一个伤心的人~");
}
} else {
// 非法的话, 给出错误提示
System.out.println("您的成绩输入有误!");
}
}
switch语句:
格式:
switch (表达式) {
case 1:
语句体1;
break;
case 2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
执行流程:
- 首先计算出表达式的值
- 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
- 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
switch案例-减肥计划
public static void test() {
// 1. 键盘录入星期数据,使用变量接收
Scanner sc = new Scanner(System.in);
System.out.println("请输入星期数");
int week = sc.nextInt();
// 2. 多情况判断,采用switch语句实现
switch (week) {
// 3. 在不同的case中,输出对应的减肥计划
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;
}
}
switch语句case穿透:
如果switch语句中,case省略了break语句, 就会开始case穿透,会一直往下执行,当开始case穿透,后续的case就不会具有匹配效果,内部的语句都会执行,直到看见break,或者将整体switch语句执行完毕,才会结束。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入星期数:");
int week = sc.nextInt();
switch (week) {
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("穿透了吗");
break;
case 6:
case 7:
System.out.println("约师妹");
break;
default:
System.out.println("您的输入有误");
break;
}
}
for循环:
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。
格式
for (初始化语句;条件判断语句;条件控制语句) {
循环体语句;
}
格式解释:
初始化语句
: 用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样条件判断语句
:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去循环体语句
: 用于表示循环反复执行的内容,简单说就是循环反复执行的事情\条件控制语句
:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去
执行流程
- 执行初始化语句
- 执行条件判断语句,看其结果是true还是false=
如果是false,循环结束
如果是true,继续执行- 执行循环体语句
- 执行条件控制语句
- 回到2继续
求1-100之间的偶数和,并把求和结果在控制台输出
public static void main(String[] args) {
//求和的最终结果必须保存起来,需要定义一个变量,用于保存求和的结果,初始值为0
int sum = 0;
for (int i = 1; i <= 100; i++) {
//对1-100的偶数求和,需要对求和操作添加限制条件,判断是否是偶数
if (i % 2 == 0) {
sum += i;// sum += i;相当于sum=sum+i;
}
}
//当循环执行完毕时,将最终数据打印出来
System.out.println("1-100之间的偶数和是:" + sum);
}
for循环案例-水仙花数
水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于原数
例如:153 3*3*3 + 5*5*5 + 1*1*1 = 153
public static void main(String[] args) {
// 1. 定义变量count,用于保存“打印过”的数量,初始值为0
int count = 0;
for (int i = 100; i <= 999; i++) {
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 10 / 10 % 10;
if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i) {
// 2. 在判定和打印水仙花数的过程中,拼接空格, 但不换行,并在打印后让count变量+1,记录打印过的数量
System.out.print(i + " ");
count++;
// 3. 在每一次count变量+1后,判断是否到达了2的倍数,是的话,换行
if (count % 2 == 0) {
System.out.println();
}
}
}
}
while循环:
格式:
初始化语句;
while (条件判断语句) {
循环体语句;
条件控制语句;
}
执行流程:
- 执行初始化语句
- 执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行- 执行循环体语句
- 执行条件控制语句
- 回到2继续
public static void main(String[] args) {
//定义一个计数器,初始值为0
int count = 0;
//定义纸张厚度
double paper = 0.1;
//定义珠穆朗玛峰的高度
int zf = 8844430;
//因为要反复折叠,所以要使用循环,但是不知道折叠多少次,这种情况下更适合使用while循环
//折叠的过程中当纸张厚度大于珠峰就停止了,因此继续执行的要求是纸张厚度小于珠峰高度
while (paper <= zf) {
//循环的执行过程中每次纸张折叠,纸张的厚度要加倍
paper *= 2;
//在循环中执行累加,对应折叠了多少次
count++;
}
//打印计数器的值
System.out.println("需要折叠:" + count + "次");
}
dowhile循环格式:
初始化语句;
do {
循环体语句;
条件控制语句;
}while(条件判断语句);
执行流程:
- 执行初始化语句
- 执行循环体语句
- 执行条件控制语句
- 执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行- 回到2继续
public static void main(String[] args) {
//需求:在控制台输出5次"HelloWorld"
//for循环实现
for (int i = 1; i <= 5; i++) {
System.out.println("HelloWorld");
}
System.out.println("--------");
//do...while循环实现
int j = 1;
do {
System.out.println("HelloWorld");
j++;
} while (j <= 5);
}
三种循环的区别:
三种循环的区别:
for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)do…while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
for循环和while的区别:
条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
死循环:
格式:
for死循环格式 :
for(;;){
}
while死循环格式 :
while(true){
}
do..while死循环格式 :
do{
}while(true);
public static void main(String[] args) {
for (; ; ) {
System.out.println("药不能停");
}
/*
while(true){
System.out.println("药不能停");
}
*/
/* do {
System.out.println("药不能停");
} while (true);
*/
// System.out.println("你看我报错不"); // 报错:不会执行的语句
}
跳转控制语句:
跳转控制语句(break):
跳出循环,结束循环,break语句只能在循环和switch中进行使用
跳转控制语句(continue):
跳过本次循环,继续下次循环,基于条件控制, 在循环内部使用.
注意: continue只能在循环中进行使用!
// 需求: 模拟电梯上行的过程 1-24层, 4层不停.
public static void main(String[] args) {
for (int i = 1; i <= 24; i++) {
if (i == 4) {
continue;
}
System.out.println(i + "层到了~");
}
}
// 需求: 模拟20岁工作到80岁, 60岁退休.
public static void main(String[] args) {
for (int i = 20; i <= 80; i++) {
if (i == 60) {
break; // 结束整个循环
}
System.out.println(i + "岁正在上班");
}
}
减肥计划改进
如果是多重循环,那break只能跳出当前循环,要想全部跳出,那就给最外面循环加标号,如果要退出直接break到标号就行了
public static void main(String[] args) {
lo: //起个标号名
while (true) {
System.out.println("请输入您要查看的星期数:");
System.out.println("(如无需继续查看,请输入0退出程序)");
// 1. 键盘录入星期数据,使用变量接收
Scanner sc = new Scanner(System.in);
int week = sc.nextInt();
// 2. 多情况判断,采用switch语句实现
switch (week) {
// 3. 在不同的case中,输出对应的减肥计划
case 0:
System.out.println("感谢您的使用");
break lo;
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;
}
}
}