• 04_java基础学习_基础语法(上)03_day04总结


    =============================================================================
    =============================================================================

    涉及到的知识点有:
      1:switch语句(掌握)
      2:循环语句(掌握)
      3:循环结构(循环嵌套使用)
      4:控制跳转语句(掌握)

    =============================================================================
    =============================================================================
    1:switch语句(掌握)
      (1)格式:
        switch(表达式) {
          case 值1:
            语句体1;
            break;
          case 值2:
            语句体2;
            break;
          ......
            ......
          case 值n:
            语句体n;
            break;
          default:
            语句体n+1;
            break;   // 该break可以省略。
        }
        格式解释说明:
          switch:说明这是switch语句。
          表达式:可以是byte,short,int,char。
            JDK5以后表达式可以是枚举。
            JDK7以后表达式可以是字符串。
          case:后面的值就是要和表达式进行比较的值。
          语句体部分:可以是一条或多条语句。
          break:表示程序到这里中断,跳出switch语句了。
          default:如果所有的情况都不匹配,就执行这里的,相当于if语句中的else。
      (2)面试题:
        switch语句的表达式可以是byte吗?可以是long吗?可以是String吗?
          可以,不可以,JDK7以后可以。
      (3)执行流程:
        A:首先,计算表达式的值;
        B:其次,和每一个case的值进行匹配,如果有就执行对应的语句体,看到break就结束。
        C:如果没有匹配,就执行default的语句体n+1。
      (4)注意事项:
        A:case后面只能是常量,不能是变量;而且,多个case后面的值不能出现相同的。
        B:default可以省略吗?
          可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
          特殊情况:
            case就可以把值固定(即:判断的值是固定的)。
            例如:做单选题:A,B,C,D只有四个选项。
        C:break可以省略吗
          default后面的break可以省略。但是其余case后面的break不可以省略,否则出现的结果可能不是我们想要的。
            即:会出现一个现象:case穿透。
          最终我们建议都不要省略。
        D:default一定要在最后吗?
          不是,可以在任意位置。但是建议放在最后。因为default表示其它的情况。也即:default不是程序结束的标志。
        E:switch语句的两种结束标志:
          a:遇到break就表示结束了。
          b:如果一直没有遇到break,那就执行到程序的末尾才表示结束了。
          特别注意一个情况:如下图所示01:

          
      (5)案例:
        A:键盘录入一个数字(1-7),输出对应的星期几。(表达式是byte,int,short的情况)
        B:单项选择题。(表达式是char的情况)
          //由于我们现在没有办法键盘录入得到一个'A','B','C','D'
          //此时需要强制转换为字符类型。
          Scanner sc = new Scanner(System.in);
          int choiceNumber = sc.nextInt();
          char choice = (char) choiceNumber;
        C:键盘录入一个字符串的问题。(表达式是字符串的情况)
          String s = sc.nextLine();
        D:根据给定的月份,输出对应的季节。(可以使用case穿透简化代码)
      (6)if语句和switch语句各自的使用场景:
        A:if语句
          针对boolean类型的判断。
          针对一个范围的判断。
          针对几个常量的判断。
        B:switch语句
          针对几个常量的判断。
    -----------------------------------------------------------------------------
    2:循环语句(掌握)

      (1)有三种:for循环,while循环,do...while循环。
        注意:反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环。
    ---------------------------------------
      (2)for循环语句
        A:格式:
          for(初始化语句;判断条件语句;控制条件语句) {
            循环体语句;
          }
          执行流程:
            a:执行初始化语句(只做一次);
            b:执行判断条件语句;
              如果这里是true,就继续。
              如果这里是false,循环就结束。
            c:执行循环体语句;
            d:执行控制条件语句;
            e:回到b继续。
        B:注意事项:
          a:判断条件语句无论是简单还是复杂,结果都是boolean类型。
          b:循环体语句如果是一条,可以省略大括号,但是不建议省略。
          c:一般来说:有分号就没有左大括号,有左大括号就没有分号。
        C:案例:
          a:输出10次HelloWorld。
          b:输出1-10的数据。
          c:输出10-1的数据。
          d:求1-10的和。(循环的求和思想)
          如下图所示02:

          
          e:求1-100的和,求1-100的偶数和,求1-100的奇数和。
          f:求5的阶乘。
            n! = n * (n - 1)!
            n! = n * (n - 1) *(n -2) * (n - 3) * ... * 3 * 2 * 1
          g:在控制台打印水仙花数。
            何为水仙花数?答:一个三位数,其各位数字的立方和等于该数本身。
            ge:    153/1%10 = 3
            shi:   153/10%10 = 5
            bai:   153/100%10 = 1
            qian:  x/10000%10
            wan:  x/10000%10
            ......
            小结:    如果想把某数的个位取出来,就用该数除以1取整后再对10取余;
                如果想把某数的十位取出来,就用该数除以10取整后再对10取余;
                如果想把某数的百位取出来,就用该数除以100取整后再对10取余;
            其余位以此类推。
          h:统计水仙花个数。
            循环的统计思想。
          i:改进版的回文数。
            一个五位数:12621
            个位 = 万位
            十位 = 千位
            个位 + 十位 + 千位 + 万位 = 百位
          j:统计1-1000之间同时满足如下条件的数据有多少个。
            x%3==2
            x%5==3
            x%7==2
    ---------------------------------------
      (3)while循环
        A:基本格式:
          while(判断条件语句) {
            循环体语句;
          }
          ---------------------------------------
        扩展格式:
          初始化语句;
          while(判断条件语句) {
            循环体语句;
            控制条件语句;
          }
          ---------------------------------------
          for(初始化语句;判断条件语句;控制条件语句) {
            循环体语句;
          }
          ---------------------------------------
          通过查看这个格式,我们就知道while循环可以和for循环等价转换。
        B:while的练习:
          把for语句的练习用while改进。
        C:for和while的区别:
          a:使用上的区别:
            如果想在循环结束后,继续使用控制条件语句所控制的那个变量,用while循环,否则用for循环。不知道的时候用for循环。
            因为变量要及早的从内存中消失,可以提高内存的使用效率。
          b:理解上的区别:
            for适合于一个范围内的判断。
            while适合次数不明确的判断。
              举例:吃葡萄。
        D:案例:
          a:珠穆朗玛峰问题。(不知道次数用while)
          b:小芳存钱问题(break以后才能做)。
    ---------------------------------------
      (4)do...while循环
        A:基本格式:
          do {
            循环体语句;
          }while(判断条件语句);
          ---------------------------------------
        扩展格式:
          初始化语句;
          do {
            循环体语句;
            控制条件语句;
          }while(判断条件语句);
          ---------------------------------------
          for(初始化语句;判断条件语句;控制条件语句) {
            循环体语句;
          }
          ---------------------------------------
          通过查看格式,我们就可以看出其实三种循环的格式可以是统一的。
        B:三种循环的区别:
          a:do...while循环至少执行一次循环体。
          b:for和while必须先判断条件是否是true,然后才能决定是否执行循环体。
          c:我们一般优先考虑for,其次考虑while,最后考虑do...while。
    ---------------------------------------
      (5)循环使用的注意事项(死循环)
        A:一定要注意修改控制条件语句,否则容易出现死循环。
        B:最简单的死循环格式:
          a:while(true){...}
          b:for(;;){...}
    -----------------------------------------------------------------------------
    3:循环结构(循环嵌套使用)
      循环嵌套:循环语句的循环体本身就是一个循环语句。
      (1)请输出一个4行5列的星星(*)图案.
        *****
        *****
        *****
        *****

        for (int x = 0; x < 4; x++) { //外循环控制行数。
          for (int y = 0; y < 5; y++) { //内循环控制列数。
            System.out.print("*");
          }
          System.out.println();
        }
      (2)请输出如下图形.
        *
        **
        ***
        ****
        *****

        for (int x = 0; x < 5; x++) { //外循环控制行数。
          for (int y = 0; y <= x; y++) { //内循环控制列数。
            System.out.print("*");
          }
          System.out.println();
        }
      (3)在控制台输出九九乘法表。
        *
        **
        ***
        ****
        *****
        ******
        *******
        ********
        *********

        for (int x = 0; x < 9; x++) { //外循环控制行数。
          for (int y = 0; y <= x; y++) { //内循环控制列数。
            System.out.print("*");
          }
          System.out.println();
        }
    ---------------------------------------
        1*1=1
        1*2=2   2*2=4
        1*3=3   2*3=6   3*3=9
        1*4=4   2*4=8   3*4=12   4*4=16
        ... ... ... ... ...
        1*9=9   2*9=18    3*9=27   4*9=36 ...

        for (int x = 1; x <= 9; x++) { //外循环控制行数。
          for (int y = 1; y <= x; y++) { //内循环控制列数。
            System.out.print(y+"*"+x+"="+y*x+" ");
          }
          System.out.println();
        }
      (4)注意事项:
        'x'    x表示任意,这种做法叫转移字符。

        ' '    tab键的位置
        ' '   回车(回到旧行的开端)
        ' '     换行(换到新行的开端)
    -----------------------------------------------------------------------------
    4:控制跳转语句(掌握)
      (1)break:中断的意思
        A:用在循环(loop)语句中加入了if判断的情况和switch语句中,离开此应用场景无意义。
        B:作用:
          a:跳出单层循环。
          b:跳出多层循环,需要与标签语句的配合。即给循环起个名字。但是呢,几乎不用,跳出多层循环。应用:break配合标签使用,可以通过内循环控制外循环。
            格式:标签名:语句
            例如:
            wc:for(int x = 0; x < 3; x++) {
              nc:for(int y = 0; y < 4; y++) {
                if(y == 2) {
                  //break nc;
                  break wc;
                }
                System.out.print("*");
              }
              System.out.println();
            }
    ---------------------------------------
      (2)continue:继续的意思
        A:用在循环中,离开此应用场景无意义。
        B:作用:
          break:跳出单层循环,循环结束,不在继续下去了。
          continue:跳出一次单层循环,但循环没有结束,继续下一次循环。特别注意:在while循环的循环体中使用continue,可能使程序停不下来。
        C:填空题
        (1)
        for(int x = 1; x < 10; x++) {
          if(x == 3) {
            //break;   // 1 2
            continue;     // 1 2 4 5 6 7 8 9
          }
          System.out.println(x);
        }
        (2)
        for(int x = 1; x <= 10; x++) {
          if(x%3 == 0) {
            // 在此处填写代码
          }
          System.out.println(“Java基础班”);
        }
        如何让控制台输出2次:Java基础班
          break;
        如何让控制台输出7次:Java基础班
          continue;
        如何让控制台输出13次:Java基础班
          System.out.println(“Java基础班”);
    ---------------------------------------
      (3)return:返回的意思
        return关键字不是为了跳转出循环体,更常用的功能是结束一个方法,也就是退出一个方法。
          A:用于结束方法的,后面还会在继续讲解和使用。
          B:一旦遇到return,程序就不会在继续往后执行。
    ---------------------------------------
      (4)用while语句和break结合使用:小芳存钱案例。

     1 /*
     2     需求:小芳的妈妈每天给她2.5元钱,她都会存起来,但是,
     3         每当这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱,
     4         请问,经过多少天,小芳才可以存到100元钱。
     5     分析:
     6         A:小芳的妈妈每天给她2.5元钱。
     7             double dayMoney = 2.5;
     8         B:她都会存起来
     9             double daySum = 0;
    10         C:从第一天开始存储。
    11             int dayCount = 1;
    12         D:经过多少天,小芳才可以存到100元钱。
    13             double result = 100;
    14         E:这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱,
    15             说明要判断dayCount的值,如果对5整除就减去6元钱。
    16                 daySum -= 6;
    17             由此还隐含了一个问题,就是要判断dayCount的值,如果不是5的倍数天的话,钱要累加。
    18                 daySum += dayMoney;
    19         F:因为不知道是多少天,所以我用死循环,一旦超过100元我就退出循环。
    20 */
    21 class WhileDemo {
    22     public static void main(String[] args) {
    23         //每天要存储的钱是2.5元
    24         double dayMoney = 2.5;
    25             
    26         //存钱的初始化值是0
    27         double daySum = 0;
    28             
    29         //从第一天开始存储
    30         int dayCount = 1;
    31             
    32         //最终存储不小于100就不存储了
    33         int result = 100;
    34             
    35         //因为不知道是多少天,所以我用死循环,
    36         while(true) {
    37             //累加钱
    38             daySum += dayMoney;
    39                 
    40             //一旦超过100元我就退出循环。
    41             if(daySum >= result) {
    42                 System.out.println("共花了"+dayCount+"天存储了100元");
    43                 break;
    44             }
    45                 
    46             if(dayCount%5 == 0) {
    47                 //花去6元钱
    48                 daySum -= 6;
    49                 System.out.println("第"+dayCount+"天花了6元钱");
    50             }
    51                 
    52             //天数变化
    53             dayCount++;
    54         }
    55     }
    56 }    
  • 相关阅读:
    mysql 新用户添加和权限
    分治法
    插入排序
    猴子分桃问题
    关于PHP面向对象 静态方法的疑问
    php中static 静态变量和普通变量的区别
    php函数引用返回
    redis 限制请求次数的写法
    cas单点登录认证原理
    聚簇索引和非聚簇索引
  • 原文地址:https://www.cnblogs.com/chenmingjun/p/8424784.html
Copyright © 2020-2023  润新知