2022-04-01 西安 javaSE(03)switch,循环语句、break、continue

swtich语句

switch格式

1.小括号()中数据值数据类型

  •   原则上只支持int类型,但是考虑到自动类型提升。所以也支持 byte,short,char
  •   jdk5.0以后,支持枚举类型Enum
  •   jdk7.0以后,支持字符串类型String
switch(数据值){
         case 数据值1:
               语句体
               break;
         case 数据值2:
               语句体2
               break;
         default:
               语句体n+1
               break;
}

2.default的位置可以与case互换,不影响。推荐写在最后。
3.default 也可以不写,推荐写


case穿透

分支当中没有break的话,直接进入下一个分支执行。叫做case穿透现象

根据指定的月份输出对应季节  ,缓存穿透还还能这么用

        int month=7;
        switch(month) {
            case 1: case 2: case 12:
                System.out.println("冬季");
                break;
            case 3: case 4: case 5:
                System.out.println("春季");
                break;
            case 6: case 7: case 8:
                System.out.println("夏季");
                break;
            case 9: case 10: case 11:
                System.out.println("秋季");
                break;
            default:
                System.out.println("你输入的月份有误");
                break;
        }

------------------------------------------------

不写break导致的case穿透--老坑了

        int num=3;
        switch(num){
            case 1:
                System.out.println("你好");
            case 2:
                System.out.println("我好");
            case 3:
                System.out.println("大家好");
            default:
                System.out.println("他好我也好");

        }

运行结果,2次验证结果就是这样的【22-08-05回看】

-----------------------------------------------------

case穿透--更换default位置,走其中一个case

        int num=2;
        switch(num){
            case 1:
                System.out.println("你好");
            case 2:
                System.out.println("我好");
            default:
                System.out.println("他好我也好");
            case 3:
                System.out.println("大家好");

        }

运行结果:感觉不写break以后就成了顺序结构。一溜执行

case穿透,-更换default位置,要是走default

        int num=4;
        switch(num){
            case 1:
                System.out.println("你好");
            case 2:
                System.out.println("我好");
            default:
                System.out.println("他好我也好");
            case 3:
                System.out.println("大家好");

        }

运行结果:


循环语句

循环结构: for语句

仔细体会,循环的执行顺序就像我画的这副灵魂画作一般

----------     《---
            -        -
                =

for(初始化语句;循环条件语句;迭代语句){

循环体语句

}

for (int i = 0; i < 10; i++) {
    System.out.println(i+"-> 你好啊");
}

for语句执行流程

先执行初始化语句;
循环条件语句为true->执行循环体语句->执行迭代语句->跳回循环语句条件判断
循环条件语句如果是false,for语句结束。


for循环打印水仙花数

每2个一换行,打印水仙花数并打印水仙花数的个数:

所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
* 举例:153就是一个水仙花数。 153 = 1*1*1 + 5*5*5 + 3*3*3

        int count=0;
        for(int x=100; x<1000; x++) {
            //获取三位数的个位,十位,百位
            int ge = x%10;
            int shi = x/10%10;
            int bai = x/10/10%10;
            //数据筛选
            if((ge*ge*ge+shi*shi*shi+bai*bai*bai) == x) {
                count++;
                if(count%2==0){
                    System.out.println(x);
                }else{
                    System.out.print(x+" ");
                }
            }
        }
        //输出统计结果就可以了
        System.out.println("水仙花数共有:"+count+"个");

运行结果:


while循环语句

执行流程:循环条件为false,while循环语句结束
循环条件为true,执行循环体语句;再去判断循环条件

while(循环条件){
         循环体语句
 }

 例如之后会学到的流,在进行文件复制的代码

int len;
while((len=fis.read(bytes))!=-1){
    fos.write(bytes,0,len);
}

为了和for语句互相转换,while衍生的扩展格式

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


do...while语句

do...while感觉已经报废了,版本弃子【这里顺便提一下,因为可能看源码或者别人的代码用到】

do {
     循环体语句
}while(循环条件语句);


执行流程:
1.先执行循环体语句。
2.循环条件判断是false,do...while结束
循环条件判断是true,再去执行循环体语句。

dowhile 衍生格式,,【我看都不想看了,这种版本弃子中的弃子,】

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


三种循环的区别

  1. 循环变量作用域分析
          for语句的循环变量i在循环结束自动消失,可节约内存
          while和dowhile的扩展格式的循环变量需要等到所在的方法结束后才消失,浪费内存资源

   2.循环条件语句执行次数不同,打印10遍HelloWorld
          for和while 11次判断,dowhile判断10次。
   3.循环体语句最少的执行次数
          for和while 最少0次,dowhile最少1次。

实际开发怎么选
       1.有明显的循环范围或循环次数选择for遍历  
       2.不符合条件一的选择while
       3.在实际开发中不会选择dowhile


循环延申

break、continue、return

break使用场景:
    1.break中断switch语句。用来结束switch语句
    2.break中断循环语句如果是内部循环,则仅中断内部循环。

continue使用场景:

循环语句当中,结束当次循环,继续下一次循环 。一般 用于跳过指定条件下的循环体,如果循环是嵌套的,仅跳过当前循环
在控制语句同一作用域内,break,continue后不能编写代码,会编译报错,因为永远执行不到

死循环

死循环要求:循环判断条件永远为true

实际开发,更推荐while死循环

//while死循环语句

    while(true){
      //循环体语句
    }

但是在框架源码,算法,设计模式,更推荐for的死循环格式,因为for的死循环效率更高

//for死循环语句

    for( ; ; ){
      //循环体语句
      }

for循环嵌套

不管咋样嵌套,始终记住单个for循环的执行流程。才不会迷糊

for(; ;){
     for(; ;){

     }
}

循环嵌套的经典案例,打印1-100所有质数

什么是质数

  1.     只能被1或本身进行整除
  2.     1不是质数

打印1-100质数,方式一:

        //质数的因数只有2个,通过因数的个数判断
        for(int i=2;i<=100 ;i++){
            int count=0;
            for(int j=1;j<=i ;j++){
                if(i%j==0){
                    count++;
                }
            }
            if(count==2){
                System.out.println("质数"+i);
            }
        }

打印1-100质数,方式二:

22-08-05 回访,自己默写出来的是第二种方式

        //打印1-100质数
        for (int i = 1; i < 100; i++) {
            boolean isZhiShu = true;
            if (i == 1) {
                continue;
            }
            for (int j = 2; j < i; j++) {
                if (i % j == 0) {
                    isZhiShu = false;
                    break;
                }
            }
            //打印质数
            if (isZhiShu) {
                System.out.println("质数-》" + i);
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值