【Java】- 程序流程控制 - 循环结构

1. for循环

  • 控制一段代码反复执行很多次
  • 示例
public class ForDemo1 {
    public static void main(String[] args) {
        // 输出3次HelloWorld
        for (int i = 0; i < 3; i++) {
            System.out.println("HelloWorld");
        }
        // 输出5次HelloWorld
        for (int i = 0; i < 5; i++) {
            System.out.println("HelloWorld");
        }
        // 输出4次HelloWorld
        for (int i = 1; i < 5; i++) {
            System.out.println("HelloWorld");
        }
        // 输出5次HelloWorld
        for (int i = 1; i <= 5; i++) {
            System.out.println("HelloWorld");
        }
        // 输出3次HelloWorld
        for (int i = 1; i <= 5; i+=2) {
            System.out.println("HelloWorld");
        }
    }
}

  • 案例1:求1-5之间的数据和,并把求和结果在控制台输出
public class ForTest1 {
public static void main(String[] args) {
        // 2、定义一个整数变量用户累加数据求和
        int sum = 0;
        // 1、定义一个for循环找到 1 2 3 4 5
        for (int i = 1; i <= 5; i++) {
            // i = 1 2 3 4 5
            // 3、把循环的数据累加给sum变量
            /**
             * 等价于:sum = sum + i
             * i == 1 sum = 0 + 1
             * i == 2 sum = 1 + 2
             * i == 3 sum = 3 + 3
             * i == 4 sum = 6 + 4
             * i == 5 sum = 10 + 5
             */
            sum += i;
        }
        System.out.println("1-5的和是:" + sum);
    }
}
  • 案例2:求1-10之间的奇数和,并把求和结果在控制台输出
public class ForTest2 {
    public static void main(String[] args) {
    	// 方法1
        // 3、定义一个求和的变量 累加奇数和
        int sum = 0;
        // 1、定义一个循环找到 1 2 3...10
        for (int i = 1; i <= 10; i++) {
            // 2、筛选出奇数
            if (i % 2 == 1) {
                sum += i;
            }
        }
        // 4、输出求和变量
        System.out.println("1-10的奇数和是:" + sum);

        System.out.println("------------分割线-----------");

		// 方法2
        // 2、定义一个求和的变量 累加奇数和
        int sum1 = 0;
        // 1、定义循环找到 1 3 5 7 9
        for (int i = 1; i <= 10; i+=2) {
            // i = 1 3 5 7 9
            sum1 += i;
        }
        System.out.println("1-10的奇数和是:" + sum1);
    }
}
  • 案例3:在控制台输出所有的"水仙花数"并计算出水仙花的个数,水仙花数必须满足如下2个要求:1、水仙花数是一个三位数 2、水仙花数的个位、十位、百位的数字立方和等于原数
public class ForTest3 {
    public static void main(String[] args) {
        // 在循环外定义一个变量用于记录水仙花的个数
        int count = 0;
        // 1、定义一个for循环找出全部三位数
        for (int i = 100; i <= 999; i++) {
            // 2、判断这个三位数是否满足要求
            // 个位
            int ge = i % 10;
            // 十位
            int shi = i / 10 % 10;
            // 百位
            int bai = i / 100;
            if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i) {
                System.out.print(i + "\t");
                count++;
            }
        }
        System.out.println(); // 换行
        System.out.println("水仙花个数是:" + count);
    }
}

2. while循环

  • 先判断在执行循环条件
  • 示例
public class WhileDemo {
    public static void main(String[] args) {
        int i = 0;
        // 循环三次Hello World
        while(i < 3) {
            System.out.println("Hello World");
            i++;
        }
        
        System.out.println("-------------分割线---------------");
        
        int j = 0;
        // 死循环
        while(j < 3) {
            System.out.println("Hello World");
        }
    }
}
  • 案例1:世界上最高山峰是珠穆朗玛峰(8848.86米=8848860毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。请问,折叠多少次,可以折成珠穆朗玛峰的高度
public class WhileTest1 {
    public static void main(String[] args) {
        double peakHeight = 8848869;
        double paperThickness = 0.1;

        // 3、定义一个变量用于记录纸张折叠的次数
        int count = 0;

        // 2、定义一个while循环控制纸张进行折叠
        while (paperThickness < peakHeight) {
            // 让纸张的厚度多一倍
            paperThickness *= 2;
            count++;
        }
        System.out.println("折叠的次数:" + count);
        System.out.println("纸张的最终厚度:" + paperThickness);
    }
}

3. do-while循环

  • 先执行再判断循环条件
  • 示例
public class DoWhileDemo {
    public static void main(String[] args) {
        int i = 0;
        // 循环三次
        do {
            System.out.println("Hello World");
            i++;
        } while (i < 3);
    }
}

4. for和while的区别

  • for循环和while循环的执行流程是一模一样的
  • 如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环
  • for循环中,控制循环的变量只在循环中可以使用。While循环中,控制循环的变量在循环后还可以继续使用

5. 三种循环的区别

  • for循环和while循环(先判断后执行)
  • do-while循环(第一次先执行后判断)

6. 死循环

  • 一直循环的执行下去,如果没有干预不会停止下来
  • 示例
public class DeadForDemo8 {
    public static void main(String[] args) {
        for (int i = 0; ; i++) {
            System.out.println("Hello World~~~");
        }

        // 经典写法
        while (true) {
            System.out.println("我是快乐的死循环~~~");
        }

        do {
            System.out.println("我是快乐的死循环~~~");
        } while (true);
    }
}
  • 案例1:系统密码是520,请用户不断的输入密码验证,验证不对输出密码错误,验证成功输出欢迎进入系统,并停止程序
public class DeadForTest {
    public static void main(String[] args) {
    	// 1、定义正确的密码
		int okPassWord = 520;
        // 2、定义一个死循环让用户不断的输入密码认证
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请您输入正确的密码:");
            int password = sc.nextInt();
            // 3、使用if判断密码是否正确
            if (password == okPassWord) {
                System.out.println("登录成功了~~~");
                break; // 结束当前所在执行的循环
            } else {
                System.out.println("密码错误!");
            }
        }
    }
}

7. 循环嵌套

  • 循环中又包含循环
  • 外部循环每循环一次,内部循环全部执行完一次
  • 示例
public class ForForDemo {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                System.out.println("我爱你");
            }
            System.out.println("------------------");
        }
    }
}
  • 案例1:在控制台使用 * 打印出4行5列的矩形
public class ForForTest {
    public static void main(String[] args) {
    	for (int i = 0; i < 4; i++) {
           	for (int j = 0; j < 5; j++) {
             	System.out.println("*");
           	}
         	System.out.println(); // 换行
        }
    }
}

8. 跳转控制语句

  • break:跳出并结束当前所在循环的执行,只能用于结束所在循环,或者结束所在switch分支的执行
  • continue:用于跳出当前循环的当次执行,进入下一次循环,只能在循环中进行使用
  • 示例
public class BreakAndContinueDemo {
    public static void main(String[] args) {
        // 场景:假如你有老婆了,然后你犯错了,你老婆罚你做5天家务
        // 每天都是洗碗,但是洗到第三天后心软了,原谅你了不用洗了
        for (int i = 0; i < 5; i++) {
            System.out.println("快乐的洗碗~~~");
            if (i == 2) {
                break; // 跳出并结束当前循环的执行
            }
        }
        
        // 场景:假如你有老婆了,然后你犯错了,你老婆罚你做5天家务
        // 每天都是洗碗,但是洗碗到第三天后心软了,原谅你了不用洗了,但是依然不解恨,继续洗第四天、第五天
        for (int i = 1; i <= 5; i++) {
            if (i == 3) {
                continue; // 立即跳出当次循环,进入循环的下一次!
            }
          	System.out.println("洗碗第:" + i + "天");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值