Java 流程控制语句
if 条件语句
语法格式:
if (关系表达式1) {
语句体1;
} else if (关系表达式2) {
语句体2;
} else {
语句体n+1;
}
示例:小明快要期末考试了,小明爸爸对他说,会根据他不同的考试成绩,送他不同的礼物,假如你可以控制小明的得分,请用程序实现小明到底该获得什么样的礼物,并在控制台输出。
分析:
- 小明的考试成绩未知,可以使用键盘录入的方式获取值。
- 由于奖励种类较多,属于多种判断,因此采用 if...else 分支语句实现。
- 为每种判断设置对应的条件。
- 为每种判断设置对应的奖励。
import java.util.Scanner;
public class Test{
public static void main(String[] args){
// 录入考试成绩
Scanner sc = new Scanner(System.In);
System.out.println("请输入您的成绩:");
int score = sc.nextInt();
// 判断输入的成绩是否合法
if (score >= 0 && score <= 100) {
if (score >= 90) {
System.out.println("奖励:自行车一辆");
} else if (score >= 70) {
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 语句体部分,然后程序结束。
示例 1:键盘录入星期数,显示今天的减肥活动
周一:跑步
周二:游泳
周三:慢走
周四:动感单车
周五:拳击
周六:爬山
周日:好好吃一顿
示例代码:
import java.util.Scanner;
public class Day{
public static void main(String[] args){
// 录入星期数据
Scanner sc = new Scanner(System.in);
System.out.println("今天星期几:");
int weekDay = sc.nextInt();
// 判断 weekDay
switch(weekDay){
// 在不同的 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;
}
}
}
示例 2:case 穿透
根据键盘录入的星期数,对应输出工作日或休息日。
/*
case 穿透是如何产生的:
如果 switch 语句中,case 省略了 break 语句,就会开始 case 穿透。
现象:
当开始 case 穿透,后续的 case 就不会具有匹配效果,其内部语句都会执行,
直到看见 break,或者将整体 switch 语句执行完毕,才会结束。
*/
import java.util.Scanner;
public class Test{
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 循环
语法格式:
for (初始语句; 循环体条件表达式; 循环体执行后语句) {
循环体语句;
}
- 循环体条件表达式可以使用 for 语句外的变量。
- 循环体执行后的语句可以有多个表达式,用逗号分开。
示例:多条件表达式
int divided = 100;
int divisor = 3;
int found = 0;
for (int i=0; i<100 & found<10; i++, found++) {
divided++;
}
示例:每行打印两个水仙花数
水仙花数:指的是一个三位数,其个位、十位、百位上的数字的立方和等于原数。如 153 = 3*3*3 + 5*5*5 + 1*1*1
public class Test {
public static void main(String[] args){
int times = 0;
for(int i=100; i<=1000; i++){
// 求出各位置上的数值
int ones = i % 10;
int tens = i / 10 % 10;
int hundreds = i / 100 % 10;
// 计算立方和后与原始数字比较是否相等
if(ones*ones*ones + tens*tens*tens + hundreds*hundreds*hundreds == i){
// 打印元素但不换行
System.out.print(i+" ");
times++;
// 如果是偶数,则进行换行
if(times % 2 == 0){
System.out.println();
}
}
}
}
}
while 循环
语法:
初始化语句;
while (条件判断语句) {
循环体语句;
}
示例:世界最高山峰是珠穆朗玛峰(8844.43 米 = 8844430 毫米),假如有一张足够大的纸,它的厚度是 0.1 毫米。请问,折叠多少次,可以折成珠穆朗玛峰的高度?
public class Test {
public static void main(String[] args){
// 海拔
int top = 8844430;
// 现纸张厚度
double current = 0.1;
// 折叠次数
int count = 0;
while(current < top){
current *= 2;
count += 1;
}
System.out.println("折叠次数:"+count);
}
}
do while 循环
语法格式:
初始化语句;
do {
循环体语句;
}while(条件判断语句);
示例:在控制台输出 5 次 "HelloWorld" 。
public class Test {
public static void main(String[] args){
// for 循环 实现
for(int i=1; i<=5; i++){
System.out.println("Hello World");
}
System.out.println("---------------");
// do while 循环 实现
int i = 0;
do{
System.out.println("Hello world");
i++;
}while(i <= 5);
}
}
三种循环的区别
三种循环的区别:
- for 循环和 while 循环:先判断条件是否成立,然后决定是否执行循环体(先判断后执行)。
- do...while 循环:先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)。
for 循环和 while 的区别:
- 条件控制语句所控制的自增变量,因为归属 for 循环的语法结构中,在 for 循环结束后,就不能再次被访问到了。
- 条件控制语句所控制的自增变量,对于 while 循环来说不归属其语法结构中,在 while 循环结束后,该变量还可以继续使用。
死循环
// for 死循环:
for(;;){
}
// while 死循环:
while(true){
}
// do..while 死循环:
do{
}while(true);
break、continue
- break:跳出循环,结束循环。(break 语句只能在循环和 switch 中进行使用)
- continue:跳过本次循环,继续下次循环。(continue 只能在循环中进行使用)
示例:程序运行后,用户可多次查询星期几所对应的减肥计划,直到输入 0,程序结束。
import java.util.Scanner;
public class Test {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
// 给 while 循环起别名
loop:while(true){
System.out.println("请输入星期几:");
int weekDay = sc.nextInt();
if(weekDay==0){
System.out.println("输入为0,结束程序");
}
switch (weekDay){
case 0:
System.out.println("感谢您的使用");
break loop; // 结束整个 while 循环(若没有别名,则只是 break case 0,并继续死循环)
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;
}
}
}
}