流程控制语句
-
流程控制语句
- 顺序结构
- 选择结构(分支结构)
- if语句
- if
- if…else
- if else if else if else if…
- 循环结构
1 练习
- 根据用户输入的月份,显示正确的季节 345春天 678夏天 91011秋天 12 1 2 冬天
Scanner scanner = new Scanner(System.in);
System.out.println("请输入月份:");
int month = scanner.nextInt();
if (month >= 3 && month <= 5){
System.out.println("浅草才能没马蹄");
}else if (month >=6 && month <= 8){
System.out.println("夏天夏天...");
}else if (month >= 9 && month <= 11){
System.out.println("我言秋日胜春朝");
}else if (month == 12 || month == 1 || month == 2){
System.out.println("梅花香自苦寒来");
}else {
System.out.println("您输入的月份有误,别用我的软件");
}
- 键盘录入学生成绩,判断学生的等级
90-100 优秀
80-90 好
70 -80 良
60- 70 及格
60以下 希望之星
public static void main(String[] args) {
/**
* - 键盘录入学生成绩,判断学生的等级
* 90-100 优秀
* 80-90 好
* 70 -80 良
* 60- 70 及格
* 60以下 希望之星
*/
// 创建
Scanner scanner = new Scanner(System.in);
System.out.println("请录入学生成绩:");
double score = scanner.nextDouble();
// 根据成绩判断学生等级
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 switch语句
- 格式
switch(表达式){
case 目标值1:
语句体1;
break;
case 目标值2:
语句体2;
break;
...
case 目标值n:
语句体n;
break;
default:
语句体n+1;
break;
}
switch的格式解释:
switch中的表达式的取值可以是:byte,short,int,char
JDK5之后表达式的取值也可以是枚举
JDK7以后可以放String。
case中放入的是要和表达式进行比较的值。
语句体中可以放多行代码
public static void main(String[] args) {
int a = 5;
switch (a){
case 1:
System.out.println("匹配到1");
break;
case 2:
System.out.println("匹配到2");
break;
case 3:
System.out.println("匹配到3");
break;
default:
System.out.println("不是123的数字");
break;
}
}
- 根据用户输入的数字,输出是周几
public static void main(String[] args) {
// 根据用户输入的数字,输出是周几
Scanner scanner = new Scanner(System.in);
System.out.println("请输入1-7的数字:");
int weekDay = scanner.nextInt();
switch (weekDay){
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;
}
}
注意事项:
default的break如果是在switch语句的最后一行,可以省略不写,但是不建议省略。
switch中的语句,顺序不影响最终的结果。
case具有穿透效果,如果没有break的影响,那么会一直向下执行。
练习
- 根据用户输入的月份,显示正确的季节 345春天 678夏天 91011秋天 12 1 2 冬天
public static void main(String[] args) {
// 根据用户输入的月份,显示正确的季节 345春天 678夏天 91011秋天 12 1 2 冬天
Scanner scanner = new Scanner(System.in);
System.out.println("请输入月份:");
int month = scanner.nextInt();
// shift + alt + 上下
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;
}
}
3 循环结构
3.1 概述
循环结构可以在满足循环条件的情况下,反复执行某一段代码。这段被重复执行的代码称之为循环体语句。
当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环。如果一直是true,就会一直执行下去,形成死循环。
3.2 循环语句的组成
- 循环变量的初始化(初始化表达式) 类似于笔墨伺候 初始化表达式只需要执行一次
一条或者多条语句,这些语句完成一些初始化操作
- 循环出口(布尔表达式)
这是一个boolean表达式,这个表达式能决定是否执行循环体。
- 循环逻辑内容(循环体)
这个部分是循环体语句,也就是我们要多次执行的代码。
- 循环增量(步进表达式)
这个部分是在一次循环体结束后,下一次循环判断条件执行前执行,用于控制循环条件中的变量,以在合适时候结束循环。
3.3 循环结构for
- 格式:
for (初始化表达式1;布尔表达式2;步进表达式4){
循环体;3
}
- 执行顺序
1 2 3 4 2 3 4 2 3 4…2 3 4 2
当布尔表达式结果是true时,循环会继续执行。当布尔表达式结果是false时,就会结束循环。
练习:
- 在控制台输出100次HelloWorld
// 在控制台输出100次HelloWorld
// 1 2 3 4 2 3 4 2 3 4... 2
for (int i = 1;i <= 100;i++){
System.out.println("HelloWorld" + i);
}
- 打印输出1-5 和 5-1
for (int i = 1;i <= 5;i++){
System.out.println(i);
}
for (int i = 5;i >= 1;i--){
System.out.println(i);
}
- 求出1-100之间的偶数和
// 求出1-100之间的偶数和
int sum = 0;
for (int i = 1;i <= 100;i++){
// 判断i是否是偶数
if (i % 2 == 0){
// 偶数
sum += i;
}
}
System.out.println("偶数和是" + sum);
for (int i = 2;i <= 100;i+=2){
sum += i;
}
System.out.println("偶数和是" + sum);
- 统计"水仙花数"共有多少个
- "水仙花数"是一个三位数,其中个位的立方+十位的立方+百位的立方正好等于其本身。
// 统计"水仙花数"共有多少个
int count = 0;
for (int i = 100;i < 1000;i++){
// 判断三位数是否是水仙花数
// 获取个位
int ge = i % 10;
// 获取十位
int shi = i / 10 % 10;
// 获取百位
int bai = i / 100 % 10;
int num = ge * ge * ge + shi * shi * shi + bai * bai * bai;
boolean flag = (num == i);
if (flag){
// 水仙花数
System.out.println("水仙花数是" + i);
count++;
}
}
System.out.println("水仙花数总共有" + count + "个");
}
3.4 while循环
- 格式:
基本格式:
while(布尔表达式){
循环体语句;
}
扩展格式:
初始化表达式1
while(布尔表达式2){
循环体3;
步进表达式4;
}
- 执行顺序
1 2 3 4 2 3 4 … 2
- 当布尔表达式的结果是true时,循环继续执行,当布尔表达式的结果是false时,循环结束。
练习:
- 输出100次HelloWorld
int i = 1;
while (i <= 100){
System.out.println("HelloWorld" + i);
i++;
}
- 求出1-100之间的奇数和
// 求出1-100的奇数和
int i = 1;
int sum = 0;
while (i <= 100){
// 判断i是否是奇数
if (i % 2 != 0){
sum += i;
System.out.println(i);
}
i++;
}
System.out.println("1-100的奇数和是" + sum);
第二种写法
int i = 1;
int sum = 0;
while (i <= 100){
sum += i;
i += 2;
}
System.out.println("1-100的奇数和是" + sum);
- 统计水仙花数有多少个
// 统计水仙花数有多少个
int i = 100;
int count = 0;
while (i < 1000){
// 获取i的个位十位和百位
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100 % 10;
int num = (ge * ge * ge + shi * shi * shi + bai * bai * bai);
if (num == i){
System.out.println(i);
count++;
}
i++;
}
System.out.println("水仙花数总共有" + count + "个");
3.5 do-while循环
- 格式
初始化表达式1;
do{
循环体3;
步进表达式4;
}while(布尔表达式2);
- 执行顺序
1 3 4 2 3 4 2 3 4 2…2
- 布尔表达式如果结果是true,那么就继续执行循环,如果是false,就结束循环
练习:
- 输出打印100次HelloWorld
- 求出1-100之间的奇数和
int i = 1;
int sum = 0;
do{
if (i % 2 == 1){
sum += i;
}
i++;
}while (i <= 100);
System.out.println("奇数和是" + sum);
int i = 1;
int sum = 0;
do{
sum += i;
i += 2;
}while (i <= 100);
System.out.println("奇数和是" + sum);
- 统计水仙花数有多少个
// 统计水仙花数有多少个
int i = 100;
int count = 0;
do {
// 获取个位十位和百位
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100 % 10;
// 求个位十位百位的立方和
int num = ge * ge * ge + shi * shi * shi + bai * bai * bai;
if (num == i){
count++;
}
i++;
}while (i < 1000);
System.out.println("水仙花数总共有" + count + "个");
3.6 三种循环的区别
这三种循环在大部分情况下都可以通用,但是还是有一些小区别:
-
do…while循环至少会执行一次循环体
-
for循环和while循环的小区别:
- 使用区别:控制条件语句所控制的那个变量,在for循环结束后就已经不能再次访问,在内存中消失。在while循环结束后,内存中依然存在。
- for循环内存的使用效率更高。
-
使用推荐:for --while – dowhile
3.7 跳转控制语句
- 概述
- 让循环在某一步的时候结束或者跳过某些数据。
- 在java中提供了2个关键字break和continue来实现跳转控制语句。
- break(中断)
- break的应用场景
- 在选择结构的switch语句中
- 在循环语句中表示立即结束当前循环
- 注意:离开使用场景的存在是没有意义的
- break的应用场景
- continue(继续)
- continue的应用场景
- 只能用在循环语句中
- 表示跳出当前循环,继续执行下一次循环
- continue一般都用在for循环中,这样不会影响步进表达式的执行
- continue的应用场景
3.8 死循环
死循环又称为无限循环,也称为永真循环。就是永远不会结束的循环。
while (true){}
for (;true;){}
for (;;){}