1.顺序结构

2.选择结构

格式解释:
switch关键字:表示这是一个switch语句
switch后的表达式:表示选择条件
case语句:每个case 语句表示一个分支
beak语句:表示结束switch语句
default语句:表示当所有其他的case的分支,都不能匹配switch后表达式的值的时候,此时就会执行default分支。

注意事项:
switch语句后,表达式结果的取值范围?
case 后的常量取值?
break可以省略吗?
default可以省略吗?
switch语句的结束条件

switch表示这是switch语句
表达式的取值:byte, short, int, char
JDK5以后可以是:枚举
JDK7以后可以是:String

选择结构有两种实现方式,这两种实现方式,各自适用于什么样的使用场景呢?
if的使用场景
针对结果是boolean类型的判断
分支对应多个表达式的多个取值
switch的使用场景
针对结果是固定类型的判断
表达式的取值范围只是固定的离散值集合,分支对应表达式的某一种取值

if的使用场景
针对结果是boolean类型的判断 if(true)
分支对应多个表达式的多个取值

switch的使用场景
针对结果是固定类型的判断 switch(byte,short,int,char,String)
表达式的取值范围只是固定的离散值集合,分支对应表达式的某一种取值

/**
 * case穿越
 *
 */
public class NewDemo {
    public static void main(String[] args) {
        int month = 4;
        //通过switch
        switch (month) {
            case 1:
            case 2:
            case 3:
                System.out.println("第一季度");
                break;
            case 4:
            case 5:
            case 6:
                System.out.println("第二季度");
                break;
            case 7:
            case 8:
            case 9:
                System.out.println("第三季度");
                break;
            case 10:
            case 11:
            case 12:
                System.out.println("第四季度");
                break;
            default:
                System.out.println("输入有误");
                break;
        }
    }
}

3.循环结构

在java中switch中break之后还会进行default吗 java switch default break_Math


while循环语句格式:

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

执行流程:
和for循环一模一样
联系:
for循环和while循环的联系
for循环和while循环几乎可以在任何场景下,作等价替换

for循环和while循环的区别
直观来说,for循环适合针对一个范围判断进行操作(循环次
数比较明确),while循环适合判断次数不明确操作

}

/**
 * 一般情况下来说,我们不希望程序有死循环,尤其是生产环境,你搞出一个死循环,是一个严重的错误
 * 但是死循环还是有自己独到的用处
 * 测试的时候还是很好用
 *
 * 怎么写会死循环?
 * while(true)
 * for(;;)
 *
 */
public class Demo {

    public static void main(String[] args) {
        //页面进行交互
        //数据传过来了
        //用Scanner来模拟页面传给我们的数据
        while(true){
            Scanner sc = new Scanner(System.in);
            System.out.println("页面传来的数据是: ");
            int a = sc.nextInt();
        }



        //业务逻辑

    }

4.跳转控制语句

跳转控制语句:在循环执行过程中,控制(终止)循环的执行
1. break;
2. continue;
3. return;
return 关键字不是为了跳转出循环体 不管有多少层循环嵌套,直接全部终止掉
更常用的功能是结束一个方法(函数),也就是退出一个方法。
跳转到上层调用的方法。这个在方法的使用那里会在详细的讲解。

//return 终止单重循环
    //for (int i = 1; i <= 10; i++) {
    //  System.out.println(i);
    //  if(i == 5) {
    //    return;
    //  }
    //}

   //return 终止多重循环
    for (int i = 0; i < 3; i++) {
      for (int j = 0; j < 3; j++) {
        if( j == 2) {
          return;
        }
        System.out.println("i = " + i + " -- " + "j = " + j);
      }
    }

5.运算符优先级

在java中switch中break之后还会进行default吗 java switch default break_Math_02

6.相关题目

  1. 小芳的妈妈每天给她2.5元钱,她都会存起来,但是,每当这一天是存钱的第5天或者5的倍数的话,她都 会花去6元钱,请问,至少经过多少天,小芳才可以存到100元钱。
  2. 写一个方法,判断一个数(int类型)是否是素数
  3. 正整数n若是它平方数的尾部,则称n为同构数,比如5是55=25右边的数,25是2525=625右边的数
    求1-99范围内的所有同构数

    4.水仙花数
/**
 * - 所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身
 * - 举例:153就是一个水仙花数,153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3 = 1 + 125 + 27 = 153
 *
 * 水仙花数也称之为 自恋数
 *
 * 分析:
 * 初始化语句 int i = 100;
 * 条件判断语句 i<=999/i<1000
 * 问题:找到一个三位数的百位 十位 个位都是多少
 * 个位:153 = 150 + 3  i % 10
 * 十位:153  想办法把十位的数字变成个位的 i/10 %10
 * 百位:153 i/100
 *
 */
public class Demo3 {
    public static void main(String[] args) {

        int count = 0;
        for (int i = 100; i <= 999; i++) {
            //1,取个位数
            int ones = i % 10;
            //2,取十位数
            int tens = (i / 10) % 10;
            //3,取百位数
            int hundreds = (i / 100) % 10;
            //数都拿到了 开始判断
            boolean flag = (Math.pow(ones, 3)) + (Math.pow(tens, 3)) + (Math.pow(hundreds, 3)) == i;
            if (flag) {
                System.out.println(i);
                count++;
            }
        }
        System.out.println("水仙花数一共有:" + count + "个");

    }
}
/**
 * while改写水仙花数
 *
 *
 */
public class Demo2 {
    public static void main(String[] args) {
        System.out.println("使用for循环计算水仙花数");
        int count = 0;
        for (int i = 100; i <= 999; i++) {
            //1,取个位数
            int ones = i % 10;
            //2,取十位数
            int tens = (i / 10) % 10;
            //3,取百位数
            int hundreds = (i / 100) % 10;
            //数都拿到了 开始判断
            boolean flag = (Math.pow(ones, 3)) + (Math.pow(tens, 3)) + (Math.pow(hundreds, 3)) == i;
            if (flag) {
                System.out.println(i);
                count++;
            }
        }
        System.out.println("水仙花数一共有:" + count + "个");
        System.out.println("---------------------------------------");
        System.out.println("使用while循环计算水仙花数");
        int i = 100;
        int count2 = 0;
        while (i <= 999) {
            //1,取个位数
            int ones = i % 10;
            //2,取十位数
            int tens = (i / 10) % 10;
            //3,取百位数
            int hundreds = (i / 100) % 10;
            //数都拿到了 开始判断
            boolean flag = (Math.pow(ones, 3)) + (Math.pow(tens, 3)) + (Math.pow(hundreds, 3)) == i;
            if (flag) {
                System.out.println(i);
                count2++;
            }
            //循环控制语句
            i++;
        }
        System.out.println(count2);
    }
}
/**
 * - 比较while和for的循环控制变量
 *
 * - 珠峰的高度是8848m,假设有一张足够大可折叠的纸张,初始厚度是0.01m,
 *  - 求解这张纸折叠多少次,纸张的厚度开始超过珠峰?
 *
 *  0.01m = 1cm
 *  8848 = 884800cm
 *  假设我用for循运算
 *
 *
 *
 */
public class Demo3 {
    public static void main(String[] args) {

        int high = 1;
        int maxHigh = 884800;
        int count = 0;
        while (high < maxHigh) {
            //模拟折叠
            high = high * 2;
            count++;
            System.out.println(high);
        }
        System.out.println("需要折叠: " + count);

        System.out.println("----------------------");

        int count2 = 0;
        for (int i = 1; i < 884800; i *= 2) {
            count2++;
        }
        System.out.println(count2);


    }
}