JavaSE - 02 流程控制

发布于:2023-01-15 ⋅ 阅读:(533) ⋅ 点赞:(0)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


1.输入、输出语句

输出语句:

public class Demo01 {
    public static void main(String[] args) {
        // 换行打印
        System.out.println("换行打印");

        // 不换行打印
        System.out.print("不换行打印");
        System.out.print("不换行打印");
    }
}

输入语句:

// 1.导包:improt java.util.Scanner.
import java.util.Scanner;

/**
 * 控制台输入的步骤:
 * 1.导包:import java.util.Scanner;
 * 2.创建键盘录入Scanner对象
 * 3.调用对象下的方法
 *      nextInt():输入一个int类型的数
 *      next() : 输入一个字符串,回车结束录入,遇到空格结束输出
 *      nextLine() : 输入一个字符串,以回车结束录入
 * 4.打印内容
 */
public class Demo01 {
    public static void main(String[] args) {
        // 2.创建键盘录入对象
        Scanner scanner = new Scanner(System.in);

        // 3.调用方法,打印输出
        // 输入一个整型数字:nextInt();
        System.out.println("请输入一个数字:");
        int num = scanner.nextInt();
        System.out.println("num = " + num);



        // 输入一个字符串,只输出空格前的内容:next();
        /*
        System.out.println("请输入字符串:");
        String str = scanner.next();
        System.out.println("str = " + str);
        */

        // 请输入字符串,要求可以录入空格:nextLine();
        /*
        System.out.println("请输入字符串:");
        String s = scanner.nextLine();
        System.out.println("s = " + s);
        */
    }
}

注意事项:

①、若next()、nextLine()同时存在时,会出现一个bug,就是执行next()时,按下回车直接可以结束nextLin语句。

​ 解决方式:不同的输入方式,创建不同的对象

②、next、nextLine区别:

​ 相同:同时输入一个字符串,回车结束录入

​ 不同:next遇到空格就结束输出,nextLine

2.顺序结构

**概述:**顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多 数的代码都是这样执行的。

程序执行的流程图:

在这里插入图片描述

public class Demo01 {
    public static void main(String[] args) {
        System.out.println("语句1");
        System.out.println("语句2");
        System.out.println("语句3");
        System.out.println("语句4");
    }
}

3.分支(选择)结构

3.1 if语句

格式:

if(条件表达式){
    语句体;
}

执行流程:

①、判断条件表达式的结果,结果有两种true 或 false

②、如果结果为true,就执行if中的语句体。

③、如果结果为false,就不执行if中的语句体。继续往后执行其它内容。

在这里插入图片描述

public class Demo01 {
    public static void main(String[] args) {
        // 判断年龄是否满足上网条件
        int age = 19;

        // if判断语句
        if (age >= 18){
            System.out.println("满足条件,可以上网!");
        }
    }
}

3.2 if…else…语句

格式:

if(条件判断){
    语句体1;
}else{
    语句体2;
}

执行流程:

①、判断条件表达式的结果,结果有两种true 或 false

②、若判断表达式结果为true,则执行语句体1。

③、若判断表示式结果为false,则执行语句体2.

④、执行完if…else…后,继续执行后续的内容。

在这里插入图片描述

public class Demo02 {
    public static void main(String[] args) {
        // 判断年龄是否满足上网条件
        int age = 17;

        // if判断语句
        if (age >= 18){
            System.out.println("满足条件,可以上网!");
        }else {
            System.out.println("不满足条件,不可以上网!");
        }
    }
}

3.3 if…else if…else…语句

格式:

if(条件表达式1){
    语句体1;
}else if(条件表达式2){
    语句体2;
}
...
else{
    语句体3;
}

执行流程:

①、首先计算关系表达式1的值

②、如果值为true就执行语句体1;

如果值为false就计算关系表达式2的值

③、如果值为true就执行语句体2;如果值为false就计算关系表达式3的值

④…

⑤、如果没有任何关系表达式为true,就执行语句体n+1。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HixHUK2b-1660637652332)(./4.if…elseif…else语句.png)]

public class Demo03 {
    public static void main(String[] args) {
        int score = 65;
        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("成绩有误!");
        }
    }
}

3.4 if…else嵌套使用

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

分析:

①小明的考试成绩未知,可以使用键盘录入的方式获取值

②由于奖励种类较多,属于多种判断,采用if…else…if格式实现

③为每种判断设置对应的条件

④为每种判断设置对应的奖励

public class Demo04 {
    public static void main(String[] args) {
        // 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("您的成绩输入有误!");
        }

    }
}

3.5 switch语句

格式:

switch(表达式){
	case 常量值1:
		语句块1;
	[break;]// 遇到break,结束当前case语句
	case 常量值2:
		语句块2;
    [break;]
		...
	[default:
		语句块n+1;//如果上述的常量值与case均不匹配,则执行本代码
	[break;]]
}

- switch表示这是switch语句
表达式的取值:byte,short,char,int
JDK5以后可以是枚举
JDK7以后可以是String
- case后面跟的是要和表达式进行比较的值
- 语句体部分可以是一条或多条语句
- break表示中断,结束的意思,可以结束switch语句
- default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似

执行过程:

首先计算出表达式的值

其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结 束。

最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

/**
 * 需求:键盘录入星期数,显示今天的减肥活动
 * 周一:跑步
 * 周二:游泳
 * 周三:慢走
 * 周四:动感单车
 * 周五:拳击
 * 周六:爬山
 * 周日:好好吃一顿
 */
public class Demo05 {
    public static void main(String[] args) {
        // 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;
        }
    }
}

4.循环结构

4.1 for循环

**概述:**循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句, 当反复 执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直 执行下去,形 成死循环。

格式:

for (初始化语句;条件判断语句;条件控制语句) {
	循环体语句;
}

解释:
	初始化语句: 用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样
	条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去
	循环体语句: 用于表示循环反复执行的内容,简单说就是循环反复执行的事情
	条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去

执行过程:

①执行初始化语句

②执行条件判断语句,看其结果是true还是false 如果是false,循环结束 如果是true,继续执行

③执行循环体语句

④执行条件控制语句

⑤回到②继续

/**
 * 在控制台打印十次HelloWord
 */
public class Demo01 {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.println("Hello Word");
        }
    }
}

/**
 * 输出 1-100的和
 */
public class Demo02 {
    public static void main(String[] args) {
        int sum = 0;// 计算总和
        // 循环计算
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        // 打印输出总和
        System.out.println("sum = " + sum);
    }
}

/**
 * 需求:在控制台输出所有的“水仙花数”
 * 解释:什么是水仙花数?
 * 水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于原数
 * 例如 153 3*3*3 + 5*5*5 + 1*1*1 = 153
 * 思路:
 * 1. 获取所有的三位数,准备进行筛选,最小的三位数为100,最大的三位数为999,使用for循环获取
 * 2. 获取每一个三位数的个位,十位,百位,做if语句判断是否是水仙花数
 */
public class Demo03 {
    public static void main(String[] args) {
        //输出所有的水仙花数必然要使用到循环,遍历所有的三位数,三位数从100开始,到999结束
        for (int i = 100; i < 1000; 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) {
                //输出满足条件的数字就是水仙花数
                System.out.println(i);
            }
        }

    }
}

4.2 while循环

格式:

初始化语句;
while (条件判断语句) {
	循环体语句;
	条件控制语句;
}

执行流程:

①执行初始化语句

②执行条件判断语句,看其结果是true还是false 如果是false,循环结束 如果是true,继续执行

③执行循环体语句

④执行条件控制语句

⑤回到②继续

/**
 * 打印10次HelloWord
 */
public class Demo01 {
    public static void main(String[] args) {
        int count = 0;
        while (count < 10){
            System.out.println("Hello Word");
            count++;
        }
    }
}

/**
 * 输出 1-100的和
 */
public class Demo02 {
    public static void main(String[] args) {
        int sum = 0;
        int count = 0;
        while (count <= 100){
            sum += count;
            count++;
        }
        System.out.println("sum = " + sum);
    }
}

/**
 * 需求:在控制台输出所有的“水仙花数”
 * 解释:什么是水仙花数?
 * 水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于原数
 * 例如 153 3*3*3 + 5*5*5 + 1*1*1 = 153
 * 思路:
 * 1. 获取所有的三位数,准备进行筛选,最小的三位数为100,最大的三位数为999,使用for循环获取
 * 2. 获取每一个三位数的个位,十位,百位,做if语句判断是否是水仙花数
 */
public class Demo03 {
    public static void main(String[] args) {
        int i = 100;
        while (i <= 1000){
            //在计算之前获取三位数中每个位上的值
            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) {
                //输出满足条件的数字就是水仙花数
                System.out.println(i);
            }
            i++;
        }
    }
}

4.3 do…while循环

格式:

初始化语句;
do {
	循环体语句;
	条件控制语句;
}while(条件判断语句);

执行流程:

① 执行初始化语句

② 执行循环体语句

③ 执行条件控制语句

④ 执行条件判断语句,看其结果是true还是false 如果是false,循环结束 如果是true,继续执行

⑤ 回到②继续

 /*
 在控制台打印十次HelloWord
 */
public class Demo01 {
    public static void main(String[] args) {
        int count = 0;
        do {
            System.out.println("Hello Word");
            count++;
        }while (count < 10);
    }
}


/**
 * 输出 1-100的和
 */
public class Demo02 {
    public static void main(String[] args) {
        int sum = 0;
        int count = 0;
        do {
            sum += count;
            count++;
        }while (count <= 100);
        System.out.println("sum = " + sum);
    }
}


/**
 * 需求:在控制台输出所有的“水仙花数”
 * 解释:什么是水仙花数?
 * 水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于原数
 * 例如 153 3*3*3 + 5*5*5 + 1*1*1 = 153
 * 思路:
 * 1. 获取所有的三位数,准备进行筛选,最小的三位数为100,最大的三位数为999,使用for循环获取
 * 2. 获取每一个三位数的个位,十位,百位,做if语句判断是否是水仙花数
 */
public class Demo03 {
    public static void main(String[] args) {
        int i = 100;
       do {
           //在计算之前获取三位数中每个位上的值
           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) {
               //输出满足条件的数字就是水仙花数
               System.out.println(i);
           }
           i++;
       }while (i < 1000);
    }
}

三种循环的区别

for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)

do…while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)

for循环和while的区别

条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访 问到了 条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变 量还可以继续使用

死循环(无限循环)的三种格式

  1. for( ; ; ) {}
  2. while(true){}
  3. do {} while(true);

4.4 循环嵌套使用

格式:

for(初始化语句①; 循环条件语句②; 控制语句⑦) {
	for(初始化语句③; 循环条件语句④; 控制语句⑥) {
		循环体语句⑤;
	}
}

外循环控制行数,内循环控制列数(外循环控制打印几行,内循环控制每行打印几列)

外循环执行一次,内循环执行一轮(时钟:时针走一个格子,分针走一圈)。

/**
 *如图:
 *      *****
 *      *****
 *      *****
 *      *****
 */
public class Demo01 {
    public static void main(String[] args) {
        for (int i = 1; i <= 4; i++) { //外循环决定的是行数

            for (int j = 1; j <= 5; j++) { //内循环决定的是列数
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

/**
 * 分析:
 * - 九九乘法表中的每一个公式当做一个*,结构和上面的案例中直角三角形相似
 * - 尝试先完成9层直角三角形的图案的输出
 * - 将*用实际公式代替
 * *
 * **
 * ***
 * 1 * 1 = 1
 * 1 * 2 = 2 2 * 2 = 4
 * 1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
 * ...
 * 保持积极的心态,从熟悉的知识点着手,逐渐解决问题
 */
public class Demo02 {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) { //行数
            for (int j = 1; j <= i; j++) { //列数
                System.out.print(j + "*" + i + "=" + (i * j) + "\t");
            }
            System.out.println();
        }
    }
}

4.5 break、return、continue

break: 可以作用于循环、switch语句。作用与循环是结束该循环,继续执行循环后面的内容。

continue: 只能作用于循环,是跳出当前循环,继续下一次循环。

return: 作用于方法,结束该方法的调用并返回相应的返回值。


网站公告

今日签到

点亮在社区的每一天
去签到