Java学习笔记——第三天

流程控制

程序中最经典的三种执行顺序

  • 顺序结构:自上而下地执行代码,最普通的执行顺序。
  • 分支结构:根据条件,选择对应代码执行。
  • 循环结构:控制某段代码重复执行。

分支结构

if分支

if分支的作用

根据条件(真或假)来决定执不执行某段代码或执行哪段代码。

if分支应用场景

需要根据不同输入选择不同输出或做出不同处理时。

if分支的三种格式

  1. if (条件表达式) {
        代码;
    }
    
    
  2. if (条件表达式) {
        代码1;
    } else {
    	代码2;
    }
    
    
  3. if (条件表达式1) {
        代码1;
    } else if (条件表达式2) {
    	代码2;
    } else if (条件表达式3) {
    	代码3;
    }
    ...
    else {
    	代码n;
    }
    
    
  • if 语句中,如果大括号控制的只有一行代码,则大括号可以省略不写。

if分支的执行流程

格式1:首先判断条件表达式的结果,如果为true执行代码,为 false 就不执行代码。

格式2:首先判断条件表达式的结果,如果为true执行代码1,为 false 就执行代码2。

格式3:

  1. 先判断条件表达式1的值,如果为true则执行代码1,分支结束;如果为false则判断条件表达式2的值。
  2. 如果值为true就执行代码2,分支结束;如果为false则判断条件表达式3的值。
  3. ...
  4. 如果没有任何条件为true,就执行else分支的代码n。

switch分支

switch分支的作用

通过比较值来决定执行哪条分支。

switch分支的格式

switch (表达式) {
	case 值1:
		执行代码1;
		break;
	case 值2:
		执行代码2;
		break;
   	…
    case 值n-1:
    	执行代码n-1;
    	break;
    default:
    	执行代码n;
}

  • 表达式类型只能是byte、short、int或char,JDK5开始支持枚举,JDK7开始支持String,不支持double、float和long。
  • case后的值不允许重复,且必须是字面量,不能是变量。
  • 正常使用switch的时候,不要忘记写break,否则会出现穿透现象。

switch分支的执行流程

  1. 先执行表达式的值,再拿着这个值去与case后的值进行匹配。
  2. 与哪个case后的值匹配为true就执行哪个case块的代码,遇到break就跳出switch分支。
  3. 如果全部case后的值与之匹配都是false,则执行default块的代码。

switch的穿透性

  • 若在某个case后没有加上break的话,程序就会一直向下运行,进入其他case中,直到遇到break或一直运行到switch末尾。
  • 当存在多个case分支的代码相同时,可以把相同的代码放到一个case块中,其他的case块都通过穿透性穿透到该case块执行代码即可,这样可以简化代码。

if和switch的比较

  • if在功能上远远强大于switch。
  • 当前条件是区间的时候,应该使用if分支结构。
  • 当条件是与一个一个的值比较的时候,switch分支更合适:格式良好,性能较好,代码优雅。

循环结构

循环结构的作用

控制一段代码重复执行多次。

for循环

for循环的格式

for (初始化语句; 循环条件; 迭代语句) {
    循环体语句(重复执行的代码);
}

for循环的应用场景

  • 有大量重复执行的代码时,可以减少代码的重复编写,灵活地控制程序的执行。
  • 批量生产数据。

while循环

while循环的格式

初始化语句;
while (循环条件) {
    循环体语句(被重复执行的代码);
    迭代语句;
}

while循环的执行流程

  1. 循环一开始,执行初始化语句一次。
  2. 接着执行循环条件语句,若为true , 就进到循环体中执行,否则就结束循环。
  3. 在循环内部执行迭代语句,之后回到步骤2。

do-while循环

do-while循环的格式

初始化语句;
do {
    循环体语句;
    迭代语句;
} while (循环条件);

do-while循环的执行流程

  1. 循环一开始,执行初始化语句一次。
  2. 接着进到循环体中执行循环体语句和迭代语句。
  3. 接着执行循环条件语句,若为true , 就回到步骤2,否则就结束循环。

do-while循环的特点

先执行后循环。

三种循环的区别

  • for循环和while循环先判断后执行,do...while循环先执行后判断。
  • for循环和while循环的执行流程是一模一样的,功能上无区别,for能做的while也能做,反之亦然。
  • 使用规范:如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环。
  • for循环中,控制循环的变量只在循环中使用。while循环和do-while循环中,控制循环的变量在循环后还可以继续使用。
  • 某些先执行后判断的业务场景用do-while循环更好。

死循环

什么是死循环

可以一直执行下去的一种循环,如果没有干预不会停下来。

死循环的应用场景

服务器程序。

死循环的写法

//写法1
for (初始化语句; 循环条件; 迭代语句) {
    循环体语句;
}

// 写法2,经典写法
while (true) {
    循环体语句;
}

//写法3
do {
    循环体语句;
} while (true);

循环嵌套

什么是循环嵌套

循环中又包含循环。

循环嵌套的写法

for (int i = 0; i < 3; i++) {
    
     for (int j = 0; j < 5; j++) {
         System.out.println(1);
     }
}

// 三种循环结构可以互相多次嵌套

循环嵌套的特点

外部循环每循环一次,内部循环会全部执行完一轮。

跳转关键字:break,continue

break

  • 跳出并结束当前所在循环的执行,只跳出一层循环,或结束所在switch分支的执行。
  • 只能在循环或switch分支中使用。

continue

  • 用于跳出当前循环的当次执行,直接进入循环的下一次执行。
  • 只能在循环中进行使用。

Random的使用

Random的作用

生成随机数。

使用Random的步骤:

  1. 导包:

    import java.util.Random;
    
  2. 生成Random对象:

    Random r = new Random();
    
  3. 调用Random的方法获得目标区间随机整数:

    int number = r.nextInt(左区间, 右区间); // 左区间可以省略,此时左区间使用默认值0
    
  • Random生成的随机数为括号内的左闭右开区间。

猜数字游戏

需求

随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏。

分析

  1. 先随机生成一个1-100之间的数据。
  2. 定义一个死循环让用户可以一直猜测。
  3. 在死循环里,每次都提示用户输入一个猜测的数字,猜大提示过大,猜小提示过小,猜中则结束游戏。

代码

import java.util.Random;
import java.util.Scanner;

public class HelloWorld {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Random r = new Random();

        int numberTarget = r.nextInt(1, 101); // 获得随机的目标数字,范围为1~100

        // 死循环,使玩家重复猜数字
        while (true) {
            // 得到玩家猜的数字
            System.out.println("请输入你猜的数字:");
            int numberGuess = sc.nextInt();

            //核心逻辑
            if (numberGuess > numberTarget){
                System.out.println("猜大了");
            } else if (numberGuess < numberTarget) {
                System.out.println("猜小了");
            } else {
                System.out.println("猜对了");
                break; // 跳出循环,结束游戏
            }
        }
    }
}

posted @ 2024-03-02 22:34  zgg1h  阅读(59)  评论(0)    收藏  举报