JAVA学习笔记三之(3)语句②

JAVA学习笔记三之(3)语句②

一、for循环语句

  1、循环到底应该包含哪些内容呢?
    A:你要谁执行很多次呢?
      循环体;
    B:如何控制次数呢?
      控制判断条件;
    C:起始条件。
    D:递增条件。

  2、for循环的格式

class ForDemo1 {
    public static void main(String[] args) {
        //需求1:请在控制台输出5次"Hello World"
        System.out.println("Hello World");
        System.out.println("Hello World");
        System.out.println("Hello World");
        System.out.println("Hello World");
        System.out.println("Hello World");
        System.out.println("-----------");

        //需求2:请在控制台输出5000000次"Hello World"
        //通过简单的分析,我们知道知道这样的程序自己实现起来比较麻烦。
        //所以,考虑通过循环改进。

        /*
            for (初始化条件表达式; 控制条件表达式; 增量表达式) {
            循环体语句;
            }
        */

        //初始化表达式从0开始。
        for (int i = 0; i < 5; i++) {
            System.out.println("Hello World");
        }

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

        //初始化表达式从1开始。
        for (int j = 1; j <= 5; j++) {
            System.out.println("Hello World");
        }
    }
}

    for (初始化条件表达式; 控制条件表达式; 增量表达式) {
      循环体语句;
    }

  3、for循环的执行流程
    A:首先执行初始化条件表达式。
    B:其次执行控制条件表达式,看其返回值是:
      true:执行循环体语句;继续执行增量表达式,然后回到B继续执行。
      false:循环结束。继续执行for循环后面的语句。
    
    在整个循环的过程中:
      初始化条件表达式:只执行一次。
      控制条件表达式:执行1次到多次。
      循环体语句和增量表达式:执行0次到多次。

  4、小示例
    (1)、输出10次”Hello World”
    (2)、请输出1-10的数据
    (3)、请输出10-1的数据

class ForDemo2 {
    public static void main(String[] args) {
        //输出10次"Hello World"
        for (int i = 0; i < 10; i++) {
            System.out.println("Hello World");
        }

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

        //请输出1-10的数据
        for (int j = 1; j <= 10; j++) {
            System.out.println(j);
        }

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

        //请输出10-1的数据
        for (int k = 10; k > 0; k--) {
            System.out.println(k);
        }
    }
}

  5、求出1-10之间的数据和。
    分析:
      A:由于我们想要获取1-10的和,所以,我们肯定要获取1-10的每一个数据。
        而这个动作,用for循环最好。
      B:思考下求和额度步骤
      0+1=1
        1+2=3
          3+3=6
            6+4=10
              10+5=15
                15+6=21
                ……
      
    通过简单的分析,我们发现了两个东西:
      a:被加数是上一次的求和结果。
        最原始的结果默认是0.
      b:加数正好就是每一次获取到的值。
    
    由于被加数和加数都是变化的,所以,我们定义两个变量。

class  ForDemo3 {
    public static void main(String[] args) {
        //最基本的做法。但是,如果数据太大,就不好了。
        //System.out.println(1+2+3+4+5+6+7+8+9+10);
        //所以,考虑改进。

        //定义求和变量(被加数)
        int sum = 0;

        /*
        for (int i = 1; i <= 10; i++) {
            //i-1,2,3,4,5...
            //sum + i = sum;
            sum += i;
            //第一次:sum = 0 + 1 = 1;
            //第二次:sum = 1 + 2 = 3;
        }
        */

        //标准代码
        for (int i = 1; i <= 10; i++) {
            sum += i;
        }

        System.out.println(sum);
    }
}

  6、求出1-100之间的偶数和。
  
    如何确定数据是偶数还是奇数呢?
      任意一个数据x。
      x%2 == 0 - - 偶数
      x%2 == 1 - - 奇数

class ForDemo4 {
    public static void main(String[] args) {
        //定义求和变量

        //方式1
        /*
        int sum = 0;

        for (int i = 1; i <= 100; i++) {
            if (i % 2 == 0) {
                sum += i;
            }
        }

        System.out.println("1-100之间的偶数和是:" + sum);
        */

        //方式2
        int sum = 0;

        for (int i = 0; i <= 100; i += 2) {
            sum += i;
        }

        System.out.println("1-100之间的偶数和是:" + sum);
    }
}

  7、求1*2*3*4*5的结果。(1求5的阶乘,n的阶乘 = 1*2*3*4*5*…*n)

class ForDemo5 {
    public static void main(String[] args) {
        //定义求乘积结果变量
        int result = 1;

        //获取1-5的数据
        for (int i = 1; i <= 5; i++) {
            result *= i;
        }

        System.out.println(result);
    }
}

  8、打印出所有的“水仙花数”。

    所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数字本身。
    
    例如:
      153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

    分析:
      A:所谓“水仙花数”是指一个三位数。告诉我们“水仙花数”的范围。100-999
      B:如何获取各位,十位,百位上的每一个数据?
        假设我有一个任意的数据x。
          个位:x%10
          十位:x/10%10
          百位:x/10/10%10
          千位:x/10/10/10%10
          ……
      C:判断
        if (x == 个位的三次方 + 十位的三次方 + 百位的三次方) {
          System.oit.println(x);
        }

class ForDemo6 {
    public static void main(String[] args) {
        //通过for循环实现获取范围的数据
        for (int x = 100; x < 1000; x++) {
            //通过取余和除法得到个,十,百位上的数据
            int ge = x%10;
            int shi = x/10%10;
            int bai = x/100;

            //判断
            if (x == (ge*ge*ge+shi*shi*shi+bai*bai*bai)) {
                System.out.println(x);
            }
        }
    }
}

  9、请输出满足条件的五位数。
      以下的条件要同时满足:
        个位=万位
        十位=千位
        个位+十位+千位+万位=百位

    分析:
      A:五位数告诉我们范围:10000-99999
      B:获取个,十,百,千,万对应的数据
      C:根据条件判断

    变量的作用域:
      变量只在它所属的那对大括号之内有效。

class ForDemo7 {
    public static void main(String[] args) {
        for (int i = 10000; i < 99999; i++) {
            int ge = i%10;
            int shi = i/10%10;
            int bai = i/10/10%10;
            int qian = i/10/10/10%10;
            int wan = i/10/10/10/10%10;

            if ((ge == wan) && (shi == qian) && (ge + shi + qian + wan == bai)) {
                System.out.println(i);
            } 
        }
    }
}

  10、请编写程序输出1-1000之内的这样的数据。
    有这样的数据,对3整除余2,对5整除余3,对7整除余2。

    分析:
      A:1-1000告诉我们了范围。用for循环实现。
      B:条件要同时满足:
        对3整除余2,对5整除余3,对7整除余2。

class ForDemo9 {
    public static void main(String[] args) {
        //1-1000告诉我们了范围。用for循环实现。

        for (int i = 1; i <= 1000; i++) {
            if (i%3==2 && i%5==3 && i%7==2) {
                System.out.println(i);
            }
        }
    }
}
二、while循环和do_while循环

  1、while循环的格式
    格式:
      while (条件表达式) {
        语句;
      }

    扩展格式:
      初始化条件表达式;
      while (控制条件表达式) {
        循环体语句;
        增量表达式;
      }
    
    while循环可以和for循环进行等价转换。
    之前的所有for循环案例都可以采用while循环改进。

class WhileDemo1 {
    public static void main(String[] args) {
        //输出10个Helllo World
        for (int i = 0; i < 10; i++) {
            System.out.println("Hello World");
        }

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

        int i = 0;
        while (i < 10) {
            System.out.println("Hello World");
            i++;
        }
    }
}

  2、for循环和while循环的区别
    (1)、区别是什么呢?
      增量的那个变量的值,for循环外面不可以继续使用。而while循环外面的可以继续使用。
      推荐使用for循环。
      
    (2)、应用场景的区别?
      如果是一个范围的操作,用for循环。
      如果要做一个动作多少次的次数不明确,用while循环。
        举例:吃葡萄。

// 水仙花案例。
class WhileDemo2 {
    public static void main(String[] args) {
        //for循环
        for (int i = 100; i < 1000; i++) {
            int ge = i%10;
            int shi = i/10%10;
            int bai = i/10/10%10;'

            if (i == (ge*ge*ge+shi*shi*shi+bai*bai*bai)) {
                System.out.println(i);
            }
        }

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

        //while循环改进
        int i = 100;
        while (i < 1000) {
            int ge = i%10;
            int shi = i/10%10;
            int bai = i/10/10%10;'

            if (i == (ge*ge*ge+shi*shi*shi+bai*bai*bai)) {
                System.out.println(i);
            }

            i++;
        }

        /*
        //这个时候,这个i就不能再定义了。
        for (int i = 100; i < 1000; i++) {
            int ge = i%10;
            int shi = i/10%10;
            int bai = i/10/10%10;'

            if (i == (ge*ge*ge+shi*shi*shi+bai*bai*bai)) {
                System.out.println(i);
            }
        }
        */
    }
}

  3、while循环的示例
    问题:我国最高的山峰是珠穆朗玛峰:8848m。
       我有一张足够大的纸张,厚度:0.01m。
       请问,我折叠多少次就可以不低于珠穆朗玛峰的高度。

    分析:
      A:结果要输出折叠的次数,所以要定于一个统计变量。初始值是0.
      B:一些知道的条件
        double start = 0.01;
        double end = 8848;
      C:规律:
        每次折叠,厚度就是以前的两倍。

class WhileDemo3 {
    public static void main(String[] args) {
        //定义统计变量
        int count = 0;

        //定于初始化值
        double start = 0.01;
        double end = 8848;

        //判断
        while (start < end) {
            //统计
            count++;

            //折叠的厚度
            start *= 2;
        }

        System.out.println(count);

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

        //用for循环改进
        count = 0;

        for (double x = 0.01, y = 8848; x < y; x *= 2) {
            count++; 
        }

        System.out.println(count);
    }
}

  4、do_while循环的格式
    (1)、基本格式:
      do {
        语句体;
      }while(判断条件);

    (2)、扩展条件:
      初始化条件表达式;
      do {
        循环体语句;
        增量表达式;
      }While(控制条件表达式);

class DoWhileDemo {
    public static void main(String[] args) {
        //用do_while实现输出10次Hello World
        int x = 0;

        do {
            System.out.println("Hello World");
            x++;
        }while (x < 10);

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

        //do_while循环和while循环以及for循环的区别?
        int y = 3;

        do {
            System.out.println("今天天气很好,我很高兴。");
            y++;
        }while (y < 3);

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

        //用while循环
        int z = 3;

        while (z < 3) {
            System.out.println("今天天气很好,我很高兴。");
            z++;
        }
    }
}
三、for循环的嵌套

  1、需求:请输出如下形状。
       * * * * *
       * * * * *
       * * * * *
       * * * * *
    输出格式:
      System.out.print(“内容”); //输出内容,没有换行。
      System.out.println(“内容”); //输出内容后,加了一个换行符。
      
    如何单独实现一个换行,不做任何输出呢?
      System.out.println();
    
    这种程序用双层循环就可以搞定。
    而且:
      A:外循环执行一次,内循环执行多次。
      B:外循环控制行数,内循环控制列数

class ForForDemo1 {
    public static void main(String[] args) {
        //我要是能够输出一颗*就好了
        //System.out.print("*");
        //System.out.println("*");
        //System.out.println();

        //一次输出一颗*
        /*
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        */

        //由于做了5次一模一样的操作,所以,我们考虑通过循环改进
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 5; j++) {
                System.out.print("*");
            }

            System.out.println();
        }
    }
}

  2、输出如下形状:
      *
      * *
      * * *
      * * * *
      * * * * *

class ForForDemo2 {
    public static void main(String[] args) {
        //看到在这个形状,我们首先输出一个5行5列的星星。
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                System.out.print("*");
            }
            System.out.println();
        }

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

        //而我们想要的是依次列数变化的。
        //由于内循环控制列,所以,内循环应该是一个变化的,而不是一个固定的值。
        //第一行:1列    j = 0, j <= 0
        //第二行:2列    j = 0, j <= 1
        //第三行:3列    j = 0, j <= 2
        //第四行:4列    j = 0, j <= 3
        //第五行:5列    j = 0, j <= 4
        //我们发现,这个程序就可以改进为最终版

        for (int i = 0; i < 5; i++) {
            for (int j = 0; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

  3、输出九九乘法表。
    1*1=1
    1*2=2  2*2=4
    1*3=3  2*3=6 3*3=9
    …
    1*9=9  2*9=18 3*9=27  4*9=36 … 8*9=72  9*9=81

    转义字符:
      \t:一个制表符。相当于按了一个tab。

class ForForDemo3 {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*" + i + "=" + i*j + "\t");
            }

            System.out.println();
        }
    }
}
四、continue和break的使用

  1、continue和break的效果
    continue:必须使用在循环之中。结束本次循环,进入下一次循环。
    break:用在switch语句和循环中。结束当前循环。
  
    注意:
      continue和break不能单独使用。

class ContinueAndBreakDemo {
    public static void main(String[] args) {
        //需求:请输出1-10的数据
        for (int i = 0; i < 10; i++) {
            System.out.println(i+1);
        }

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

        for (int j = 1; j <= 10; j++) {
            if (j % 2 == 0) {
                continue; //执行这里了,结束本次循环,继续下次循环的执行。
            }
            System.out.println(j); //1, 3, 5, 7, 9
        }

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

        for (int j = 1; j <= 10; j++) {
            if (j % 2 == 0) {
                break; //执行这里了,结束当前循环。
            }
            System.out.println(j); //1, 3, 5, 7, 9
        }

        System.out.println("over");
    }
}

  2、带标号的退出。
    看程序:
      break只能结束它当前所在的那一层循环。
      
    那么,双层循环嵌套该如何退出呢?
      带标号的退出。

class ContinueAndBreakDemo2 {
    public static void main(String[] args) {
        wc:for (int i = 0; i < 3; i++) {
            nc:for (int j = 0; j < 4; j++) {
                if (j % 2 == 1) {
                    break wc;
                }
                System.out.println("#");
            }
            System.out.println();
        }

        System.out.println("over");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值