Skip to content

day_04:判断和循环 ​

一、顺序结构 ​

略

二、分支结构 ​

1. if语句 ​

格式一: ​

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

注意点:

  1. 大括号的开头可以另起一行书写,但是建议写在第一行的末尾
  2. 在语句体中,如果只有一句代码,大括号可以省略不写
  3. 如果对一个布尔类型的变量进行判断,不要用==号

格式二: ​

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

格式三: ​

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

2. switch ​

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

执行流程: ​

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

格式说明: ​

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

default的位置和省略 ​

  1. 位置:default不一定是写在最下面的,我们可以写在任意位置。只不过习惯会写在最下面
  2. 省略:default可以省略,语法不会有问题,但是不建议省略。

case穿透 ​

就是语句体中没有写break导致的。

执行流程:

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

使用场景:

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

switch新特性 ​

java
switch (number){
    case 1 ->{
        System.out.println("一");
    }
    case 2 ->{
        System.out.println("二");
    }
    case 3 ->{
        System.out.println("三");
    }
    default ->{
        System.out.println("无");
    }
}
java
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:把有限个数据一一列举出来,任选其一

三、循环结构 ​

1. for循环 ​

格式: ​

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

注意

求和的变量不能定义在循环的里面,因为变量只在所属的大括号中有效,如果我们把变量定义在循环的里面,那么当前变量只能在本次循环中有效,当本次循环结束之后,变量就会从内存中消失,第二次循环开始的时候,又会重新定义一个新的变量。

2. while循环 ​

格式: ​

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

3. do......while ​

格式: ​

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

特点: ​

先执行后判断。

4. for和while对比 ​

  • 相同点:运行规则都是一样的;
  • 不同点:
    • for循环中:知道循环次数或者循环的范围;
    • while循环:不知道循环的次数和范围,只知道循环的结束条件。

附:练习题 ​

  1. 需求:给你一个整数x,如果x是一个回文整数,打印true,否则,返回false(回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121是回文,而123不是)。

    java
    //定义两个变量存储数字和原始值
    Scanner sc = new Scanner(System.in);
    
    while (true) {
        System.out.println("请输入一个整数:");
        int x = sc.nextInt();
        int tep = x;
    
        //定义一个变量存储倒后结果
        int sum = 0;
    
        while (x != 0) {
            //获取个位数
            int ge = x % 10;
    
            //对原有数字进行处理
            x = x / 10;
    
            //添加倒后结果
            sum = sum * 10 + ge;
        }
    
        //输出结果
        System.out.println(sum == tep);
    }
  2. 需求:给定两个整数,被除数和除数(都是正数,且不超过int的范围),将两数相除(不使用乘法、除法和%运算符),得到商和余数。

    java
    //定义被除数
    int dividend = 100;
    
    //定义除数
    int divisor = 10;
    
    //定义变量记录循环次数即商
    int num = 0;
    
    //while循环
    while (dividend >= divisor) {
        //被除数减除数
        dividend -= divisor;
    
        //统计变量自增一次
        num++;
    }
    
    //结果输出
    System.out.println("商为:" + num);
    System.out.println("余数为:" + dividend);