三种循环的运用及break和continue的区别

while是最基本的循环

 

语法结构:

while(布尔表达式){

//循环内容

}

  • 只要布尔表达式为true,循环就会一直执行下去。
  • 我们大多数情况是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环。
  • 少部分情况需要循环一直执行,比如服务器的请求响应监听等。
  • 循环条件一直为true就会造成无限循环[死循环],我们的正常业务编程中要尽量避免死循环。会影响程序性能或者造成程序卡死崩溃!
  • 思考:计算1+2+3+....+100=?
package Struct;

public class WhileDemo02 {
    public static void main(String[] args) {

        //计算1+2+3+4....+100=?
        int i = 0;
        int sum = 0;
        while(i<=100){
            sum = sum+i;
            i++;
            System.out.println(sum);//打印计算过程
        }
        System.out.println(sum);//输出结果5050
    }
}

 

do ......while循环

对于while语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。

do......while循环和while循环相似,不同的是do......while循环至少会执行一次。

 

语法结构:

do{

//代码语句

}while(布尔表达式);

 

 练习代码

 

package com.chen.www.struct;
public class WhileDemo01 {
    public static void main(String[] args) {
        int i = 0;
        int sum = 0;
        do {
            //先干活,再判断条件是否为真
            sum =sum+i;
            i++;
        }while(i<=100);

        System.out.println(sum);

    }
}

 

while和do......while的区别:

  • while先判断后执行,do......while是先执行后判断!
  • do......while总是保证循环体会被至少执行一次!这是它们的主要差别。

 

for循环

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

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

for循环执行的次数是在执行前就确定的。

 

语法结构:

for(初始化;布尔表达式;更新){

//代码语句

}

  • while与for循环
package Struct;

public class ForDemo01 {
    public static void main(String[] args) {
        int a = 0;//初始化值
        while(a<=100){//条件判断
            System.out.println("a="+a);//循环体
            a+=2;//迭代

        }
        System.out.println("while循环结束");

        //初始化值;条件判断;迭代
        for (int i= 0;i<=100;i+=2){
            System.out.println("i="+i);//循环体

        }
        System.out.println("for循环结束");
    }
}
  • 练习1:计算0到100之间的奇数和偶数的和
package Struct;

public class ForDemo02 {
    public static void main(String[] args) {

    //练习1:计算0到100之间的奇数和偶数的和
        int oddSum= 0;
        int evenSum= 0;

        for (int i = 0; i <= 100; i++) {//快捷生成for循环 “100.for”

            if (i % 2 == 0){//i膜2余数等于0则为偶数,否则为奇数
                oddSum += i;//i=oddSum+i
            }else{
                evenSum+=i;//i=evenSum+i
            }

        }
        System.out.println("输出偶数和"+oddSum);//2550
        System.out.println("输出奇数和"+evenSum);//2500
    }
}

 

  • 练习2:用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个

 

package Struct;

public class ForDemo03 {
    public static void main(String[] args) {
        //练习2:用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个

        for (int i = 0; i <= 1000; i++) {//1000.for
            if (i%5==0){
                System.out.print(i+"\t");//输出结果i+空格
            }
            if (i%15==0){
                System.out.println();//换行
            }
        }
        //println 输出完会换行
        //print 输出完不会换行


    }
}

 

  • 练习3:打印九九乘法表
     
package Struct;

public class ForDemo04 {

    public static void main(String[] args) {

        //练习3:打印九九乘法表
        /**
         * 1*1=1
         * 2*1=2   2*2=4
         * 3*1=3   3*2=6  3*3=9
         * 4*1=4   4*2=8  4*3=12 4*4=16
         * 5*1=5   5*2=10 5*3=15 5*4=20 5*5=25
         * 6*1=6   6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
         * 7*1=7   7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
         * 8*1=8   8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
         * 9*1=9   9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
         */
        /**步骤
         * 1、先打印第一列
         * 2、把固定的1再用一个循环包裹起来,将1用变量替换掉
         * 3、去掉重复项,i <= j
         */

        for (int j = 1; j <= 9; j++) {
            for (int i = 1; i <= j; i++) {
                // \t加一个空格,这里采用不换行的print来输出
                System.out.print(j+"*"+i+"="+(j*i)+"\t");
            }
            //换行
            System.out.println();
        }


    }
}

 

  • 练习4:打印一个5行的三角形

 

package Struct;

public class TextDemo01 {
    public static void main(String[] args) {
        //打印三角形 5行(练习一个星期,每晚理解性练习一遍)
         /*打印效果:
               *
              ***
             *****
            *******
           *********
         */
        for (int i = 1; i <= 5; i++) {
            //当j大于等于i时,打印一个空格,j-1
            for (int j = 5; j >= i; j--) {
                System.out.print(" ");
            }
            //当j小于等于i时,打印一个*,j+1
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            //当j小于i时,输出一个*,j+1
            for (int j = 1; j < i; j++) {
                System.out.print("*");
            }
            //换行
            System.out.println();          
            }
        }
    }

 

增强for循环(初识数组)

 

练习代码:

package Struct;

public class ForPlusDemo05 {
    public static void main(String[] args) {
        int[] numbers = {10,20,30,40,50};//数组
        //遍历数组的元素
        for (int i = 0; i < 5; i++) {//注意这里去数组里取值的次数不能大于数组内元素的个数,否则会报错。
            System.out.println(numbers[i]);
        }
        
        System.out.println("===================");
        
        for (int x:numbers){//将从numbers数组中每一次取出来的值,都赋值给x
            System.out.println(x);//输出打印x
        }
    }
}

 

break和continue

break在任何循环的主体部分,均可以用break控制循环的流程。break用于强制退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用,防止穿透)

continue语句在循环体中,用于终止某次循环过程,即跳过循环尚未执行的语句,接着进行下一次是否执行循环的判定。

break练习代码

package Struct;

public class BreakDemo {
    public static void main(String[] args) {
        int i = 0;
        while (i<100){
            i++;
            if (i==50){
                //break强制停止循环
                break;
            }
            System.out.println(i);//输出结果1-49,当i等于50的时候整个循环就停止了
        }
    }
}

 

continue练习代码

package Struct;

public class ContinueDemo {
    public static void main(String[] args) {
        int i = 0;
        while(i<100){
            i++;
            if (i==20){
                System.out.println();
                continue;//用来跳过某些特定情况
            }
            //输出结果1-100,没有输出20这个数,当i等于20的这次循环被跳过了
            System.out.println(i);
        }
    }
}

 

 综合小练习:

package struct;

import java.util.Scanner;

public class IfDemo01 {
    public static void main(String[] args) {

        //芝麻开门小程序
        Scanner s = new Scanner(System.in);
        System.out.print("请输入口令:");
        String str = s.nextLine();
        int i = 3;
        while (i>0){
            if (str.equals("芝麻开门")){
                System.out.print("“"+str+"“"+"........");
                System.out.print("口令正确!");
                break;
            }else{
                System.out.println("口令输入错误!您还有"+i+"次机会");
                System.out.print("请重新输入:");
                //再次输入
                str = s.nextLine();
            }
            i--;
        }
        System.out.println("对不起您已经输错三次口令,系统已锁定!");
        s.close();
    }
}