Day07 Java的循环结构控制

三. 循环结构

  • while循环结构

    while是最基本的循环,他的结构如下:

    while (boolean 表达式) {
        //循环内容
    }
    

    注意点:

    • 循环开始前判断boolean表达式,如果boolean表达式一开始就为false,循环不会执行
    • 只要Boolean表达式为true,循环就不会终止。
    • 大多数情况我们需要让循环停下,因此我们需要一个让表达式失效的方式
    • 少部分情况需要循环一直执行,比如服务器的请求监听等。
    • 循环条件恒为true就会造成无限循环,会影响我们的陈旭性能甚至造成卡死,应该尽量避免。

    一个实例,计算1+2+……+100

    public class LoopStructure {
        public static void main(String[] args) {
            //while Loop
            //calc 1+2+ ... + 100 = ?
            int i = 1, sum = 0;
            while (i < 101){
                sum += i++;
            }
            System.out.println("1+2+ ... +100 = " + sum); //Print 5050, right
        }
    }
    
  • do ... while 循环结构

    do ... while 循环与 while 循环类似,不同点在于 do .. while 循环至少会执行一次。结构如下:

    do {
        //循环内容
    } while (boolean 表达式)
    

    相同的例子使用do while:

    public class LoopStructure {
        public static void main(String[] args) {
    
            //do while loop
            //same sample
            int i = 1, sum = 0;
            do {
                sum += i++;
            } while (i < 101);
            System.out.println("1+2+ ... +100 = " + sum);  //Print 5050, right
        }
    }
    
  • for 循环

    • 虽然所有循环都可以使用while或者do while表示,但是Java提供了另一种语句 for循环,使一些循环结构变得更加简单。

    • for循环语句是支持迭代的一种通用结构,是最有效,最灵活的循环结构。

    • for循环执行的次数是在执行前就确定的。语法格式如下:

    for (初始化; boolean exp; 迭代因子) {
        //循环代码
    }
    

    关于for循环:最先执行初始化步骤,可以声明一种类型,但可以初始化多个循环控制变量,可以为空。然后检查boolean表达式的值,如果为true,循环体将被执行,如果为false,循环终止。也可以为空。boolean表达式为空时,for循环没有其他流程控制语句就会变成死循环。执行一次循环后,更新循环控制变量(迭代因子控制循环变量的变化)。再次检测boolean表达式,循环执行上面的过程。

    以下是两个小例子:

    public class ForLoop {
        public static void main(String[] args) {
            //for loop
            //IDEA can use [number.for] to create for loop quickly
            //for exp: 100.for
    
            //2.calc 1~100 sum of odd and even
            int oddSum = 0, evenSum = 0;
            for (int i = 1; i < 101; i++) {
                if (i % 2 == 0) {
                    evenSum += i;
                } else {
                    oddSum += i;
                }
            }
            System.out.println("Sum of odd: " + oddSum);
            System.out.println("Sum of even: " + evenSum);
    
            System.out.println("=============================");
    
            /*
             * 3. Print numbers in 1~1000 which can be divided exactly by 5
             *    And each line print 3 numbers
             */
            for (int i = 1; i <= 1000; i++) {
                if (0 == (i % (5*3))) {
                    System.out.println();
                }
                if (i % 5 == 0) {
                    System.out.printf(i + "\t");
                }
            }
        }
    }
    

    一个输出99乘法表的例子

    public class ForLoop {
        public static void main(String[] args) {
            /*
             * 4. Print 9-9 multiplication table
             */
    
            for (int i = 1; i < 10; i++) {
                for (int j = 1; j <= i; j++) {
                    System.out.printf(i + "*" + j + " = " + i*j + "\t");
                }
                System.out.println();
            }
        }
    }
    

    详细的讲解可以看这个视频:

    https://www.bilibili.com/video/BV12J41137hu?p=41

  • break & continue

    • break在任何循环语句的主体部分,都可以使用。它用于强行退出循环,不再执行循环中的剩余语句。需要注意的是他一次只能跳出一层循环。
    • continue 语句在循环语句中,用于终止某一次循环过程,跳过过该次循环直接进行是否循环的判定。
    public class BreakAndContinue {
        public static void main(String[] args) {
            // The differences between break and continue
            // Use the sample below to show it
            int i = 0;
            //输出0-4
            while (i < 10 ){
                System.out.println(i);
                if ( i == 5) break;
                ++i;
            }
    
            System.out.println("=======================");
            i = 0;
            //输出0-9,但是不输出5
            while (i < 10 ){
                if ( i == 5) {
                    ++i;
                    continue;
                }
                System.out.println(i);
                ++i;
            }
        }
    }
    
    
  • 关于goto关键字

    goto关键字很早就在程序设计语言中出现。尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用;Java没有goto。然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子---带标签的break和continue。
    “标签”是指后面跟一个冒号的标识符,例如: label:
    对Java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们就会中断到存在标签的地方。

    public class BreakAndContinue {
        public static void main(String[] args) {
            /*
             * Get primer number in 101~150
             * Use Label
             * It is just a sample
             * Do not use Label in your daily programming
             */
            outer: for (int i1 = 101; i1 <=150; i1++) {
                for (int j = 2; j < i1/2; j++) {
                    if (0 == i1 % j) continue outer;
                }
                System.out.printf(i1 + " ");
            }
        }
    }
    
    
posted @ 2021-02-21 14:47  心叶酱  阅读(33)  评论(0编辑  收藏  举报