【狂神说Java】循环

循环结构

  • while 循环
  • do...while 循环
  • for 循环
  • 在Java5中引入了一种主要用于数组的增强型for循环。

while循环

  • while是最基本的循环,它的结构为:
while(布尔表达式){
// 循环
}
  • 只要布尔表达式一直为true,就会一直执行下去。
  • 大多数情况下会让循环停止下来,我们需要一个让表达式失效的方式来结束循环。
  • 少部分情况需要循环一直执行,如服务器请求响应监听等。
  • 循环条件一直为true就是造成死循环,正常业务编程中要尽量避免死循环。否则会影响程序性能或者造成程序卡死崩溃。
//输出 1~100
int i = 0;
while(i<100){
  i++;
  System.out.println(i);
}

//计算 1+2+...+100
int i = 0;
int sum = 0;
while(i<100){
  i++;
  sum += i;
}
System.out.println(sum);

do...while循环

  • 对于while语句而言,如果不满足条件,则不能进入循环。
  • while是先判断条件然后再执行。
  • do...while先执行一次后判断是否满足条件。
do{
//代码语句
}while(布尔表达式);
// 计算 1+2+...+100
int i = 0;
int sum = 0;
do {
    i++;
    sum += i;
}while(i<100);
System.out.println(sum);

for循环

  • for循环的循环执行次数在执行前就确定的。
for(初始化;布尔表达式;更新){
// 代码语句
}

练习1:

// 计算0~100之间的奇数和、偶数和

public class Main {

    public static void main(String[] args) {
        int oddsum = 0;//存放奇数累计
        int evensum = 0;//存放偶数累计
        for (int i = 0; i <= 100; i++) {
            if (i % 2 == 0) {
                evensum += i;
            }else{
                oddsum += i;
            }
        }
        System.out.println("偶数和:"+evensum +" 奇数和:"+oddsum);
    }
}

练习2:

// 用while或for循环输出1-1000内能被5整除的数,并且每行输出3个

// while
public class Main {

    public static void main(String[] args) {
        String sum = "";//存放字符串
        int i = 0;
        int j = 0;
        while (i < 1000) {
            i++;
            if (i % 5 == 0) {
                j++;
                sum += i + " ";
                // 被3整除,换行
                if ( 3 == j) {
                    sum += "\n";
                    j = 0;
                }
            }
        }
        System.out.println(sum);
    }
}

// for
public class Main {

    public static void main(String[] args) {
        int j = 0;
        for (int i = 1; i <= 1000; i++){
            if (i % 5 == 0) {
                System.out.print(i + " ");
                j++;
                if(3 == j){
                    System.out.println(); //打印一个回车
                    j = 0;//复原,每3个一行
                }
            }
        }
    }
}

练习3:

public class Main {

    public static void main(String[] args) {
        //九九乘法表
        for(int i=1;i<10;i++){
            for (int j=1;j<i+1;j++){
                System.out.print(j +" * "+ i + " = " +(i*j)+"; ");
            }
            System.out.println();
        }
    }
}

练习4:

public class Main {

    public static void main(String[] args) {
        // 打印三角形
        /*
         每次循坏都要打印以下三个部分
         分为三部分:空白三角,左边三角,右边三角

        */
        int num = 5;
        for (int i = 0; i < num; i++) {
            for (int j = 0; j < num - i; j++) {
                System.out.print(" ");// 空白三角
            }
            for (int j = 0; j < i+1; j++) {
                System.out.print("*");// 左边三角
            }
            for (int j = 0; j < i; j++) {
                System.out.print("*");// 右边三角
            }
            System.out.println();
        }
    }
}

增强for循环

  • 声明语句:声明新的局部变量,该变量的类型和数组元素的类型匹配。其作用域限定在循环语句块,其值与此事数组元素的值相等。
  • 表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
for(声明语句:表达式){
// 代码句子
}
public class Main {

    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5, 6, 7};
        for (int x : numbers) {
            System.out.println(x);
        }
    }
}

break和continue

  • break在任何循环语句主体部分,均可以用break强制退出循环,不执行循环中剩余的语句,直接跳出循环。(break也在switch中使用)
  • continue语句用在循环语句中,用于终止某次的循环,跳出这次的未执行的语句,接着进行下一次循环。

goto关键字 (不用掌握,知道就好)

  • goto没有在java语言中正式使用
  • 带标签的break和continue可以模拟goto。
  • “标签”是指后面跟一个冒号的标识符,例如:label:
  • 对Java来说唯一用到的标签的地方在循环语句之前,因为我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,若随标签使用,他们会中断到存在标签的地方。
public class Main {

    public static void main(String[] args) {
        // 打印101-150的质数
        outer:for (int i = 101; i <= 150; i++) {
            for (int j = 2; j < i / 2; j++) {
                if (i % j == 0) {
                    continue outer;
                }
            }
            System.out.print(i + " ");
        }
    }
}
// 下面的和上面的结果一致
public class Main {

    public static void main(String[] args) {
        // 打印101-150的质数
        for (int i = 101; i <= 150; i++) {
            boolean flag = true;
            for (int j = 2; j < i / 2; j++) {
                if (i % j == 0) {
                    flag = false;
                    break;
                }
            }
            if(flag){
                System.out.print(i + " ");
            }
        }
    }
}
posted @ 2021-09-01 16:25  Jie7  阅读(82)  评论(0)    收藏  举报