Java 流程控制语句



if 条件语句

语法格式:

if (关系表达式1) {
    语句体1;
} else if (关系表达式2) {
    语句体2;
} else {
    语句体n+1;
}

示例:小明快要期末考试了,小明爸爸对他说,会根据他不同的考试成绩,送他不同的礼物,假如你可以控制小明的得分,请用程序实现小明到底该获得什么样的礼物,并在控制台输出。

分析:

  1. 小明的考试成绩未知,可以使用键盘录入的方式获取值。
  2. 由于奖励种类较多,属于多种判断,因此采用 if...else 分支语句实现。
  3. 为每种判断设置对应的条件。
  4. 为每种判断设置对应的奖励。
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;
}

执行流程:

  1. 首先计算出表达式的值。
  2. 和 case 依次比较,一旦有对应的值,就会执行相应区域的语句,在执行的过程中,遇到 break 就会结束。
  3. 如果所有的 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;
            }
        }
    }
}
posted @ 2021-09-19 00:23  Juno3550  阅读(98)  评论(0编辑  收藏  举报