Java判断和循环

195 阅读4分钟

判断和循环

流程控制语句

顺序结构

顺序语句是Java程序默认的执行流程,按照代码的先后顺序,从上到下依次执行

分支结构

if语句

if (关系表达式) {
    语句体;
}

执行流程:

  1. 首先计算关系表达式的值
  2. 如果关系表达式的值为true就执行语句体
  3. 如果关系表达式的值为false就不执行语句体
  4. 继续执行后面的其他语句

注意事项:

  1. 大括号的开头可以另起一行书写,但是建议写在第一行的末尾
  2. 在语句体中,如果只有一句代码,大括号可以省略不写,建议大括号不要省略
  3. 如果对一个布尔类型的变量进行判断,不要用==号,直接把变量写在小括号中就可以了if(flag) {}
if (关系表达式) {
    语句体1;
} else {
    语句体2;
}

执行流程:

  1. 首先计算关系表达式的值
  2. 如果关系表达式的值为true就执行语句体1
  3. 如果关系表达式的值为false就执行语句体2
  4. 继续执行后面的其他语句
if (关系表达式1) {
    语句体1;
} else if (关系表达式2) {
    语句体2;
} 
   ... 
  else {
    语句体n+1;
}
​

执行流程:

  1. 首先计算关系表达式1的值
  2. 如果true就执行语句体1;如果false就计算关系表达式2的值
  3. 如果为true就执行语句体2;如果为false就计算关系表达式3的值
  4. .....
  5. 如果所有表达式结果都为false,就执行语句体n+1

switch语句

switch(表达式) {
    case1:
        语句体1;
        break;
    case2:
        语句体2;
        break;
    ....
    default:
        语句体n+1;
        break;
}

执行流程:

  1. 首先计算表达式的值
  2. 依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束
  3. 如果所有的case后面的值和表达式的值都不匹配,就会执行default里面的语句体,然后结束整个switch语句

格式说明:

  • 表达式:(将要匹配的值)取值为byte、short、int、char。JDK5以后可以是枚举,JDK7以后可以是String
  • case:后面跟的要是要和表达式进行比较的值(被匹配的值
  • break:表示中断,结束的意思,用来结束switch语句
  • default:表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似
  • case后面的值只能是字面量,不能是变量
  • case给出的值不能重复

switch其他知识点

default的位置和省略

位置:default不一定是写在最下面的,我们可以写在任意位置,只不过习惯会写在最下面

省略:default可以省略,语法不会有问题,但是不建议省略

case穿透

产生原因:就是语句体中没有写break导致的

执行流程:

  1. 首先还是会拿着小括号中表达式的值跟下面每一个case进行匹配
  2. 如果匹配上了,就会执行对应的语句体,如果此时发现了break,那么结束整个switch语句
  3. 如果没有发现break语句,那么程序会继续执行下一个case的语句体,一直遇到break或者右大括号为止

使用场景:

如果多个case语句体重复了,那么我们会考虑利用case穿透去简化代码

switch新特性(JDK12以上)
int number = 1;
switch (number){
        case 1 -> {
            System.out.println("一");
        }
        case 2 -> {
            System.out.println("二");
        }
        case 3 -> {
            System.out.println("三");
        }
        default -> {
            System.out.println("没有这种选项");
        }
}
switch和if第三种格式各自的使用场景

if的第三种格式:一般用于对范围的判断

switch:把有限个数据一一列举出来,让我们任选其一

/*需求:键盘录入星期数,输出工作日、休息日*/
switch (week) {
    case 1,2,3,4,5 -> System.out.println("工作日");
    case 6,7 -> System.out.println("休息日");
    default -> System.out.println("没有这个星期");
}

循环语句

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

执行流程:

  1. 执行初始化语句

  2. 执行条件判断语句,看其结果是true还是false

    • 如果是false,循环结束
    • 如果是true,执行循环语句体
  3. 执行条件控制语句

  4. 回到2继续执行条件判断语句

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

相同点:运行规则都是一样的

不同点:

  • for循环中,控制循环的变量,因为归属for循环的语法结构,在for循环结束后,就不能再次被访问到了
  • while循环中,控制循环的变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
  • for循环中:知道循环次数或者循环的范围
  • while循环:不知道循环的次数和范围,只知道循环的结束条件
do...while循环
初始化语句;
do {
    循环体语句;
    条件控制语句;
} while(条件判断语句);

先执行后判断