一、for循环
1.1 语法
for (初始化;循环条件;条件变化控制){ 循环体 } for(int i = 1; i<=5; i++){ sout(i); } 执行流程: 第一轮: int i = 1; i<=5; ==>true; 执行输出,i++ 第二轮: i = 2, i<=5; ==>true; 执行输出,i++ 第三轮: i = 3, i<=5; ==>true; 执行输出,i++ 第四轮: i = 4, i<=5; ==>true; 执行输出,i++ 第五轮: i = 5, i<=5; ==>true; 执行输出,i++ 第六轮: i = 6, i<=5; ==>false; 结束循环
1.2 for循环练习题
输出练习
package com.shine.for666; public class Demo03 { public static void main(String[] args) { /** * 输出练习 * 1、输出1~100 * 2、输出1~100的奇数/偶数 * 3、输出100~1 * 4、输出a~z * 5、输出Z~A */ // 3、输出100~1 for (int i = 100; i >= 1; i--) { // 从100开始,逐渐递减,只要大于等于1就能执行 System.out.println(i); } System.out.println("------------------"); // 4、输出a~z for (int i = 97; i <= 122; i++) { // a~z对应的数字97~122 System.out.println((char) i); } } }
计算练习
package com.shine.for666; public class Demo04 { public static void main(String[] args) { /** * 计算练习 * 1、计算1~100累加的结果 * 2、计算10! * 3、计算1 + 1/2 + 1/3 + ... + 1/100 * 4、计算1 - 1/2 + 1/3 + ... - 1/100 */ // 3、计算1 + 1/2 + 1/3 + ... + 1/100 double result = 1; // 统计累加的结果 for (double i = 1; i <= 100; i++) { result *= 1/i; } System.out.println(result); } }
应用题
package com.shine.for666; public class Demo05 { public static void main(String[] args) { /** * 应用题 * 1、鸡兔同笼 * 2、水仙花数字 * 3、猴子摘桃 * 4、输出1000~2000之间的闰年,每一行5个 */ /** * 3、猴子摘桃 * 每天吃下全部桃子的一半 + 1,第十天结束发现还剩下1个 * 问最初摘下多少桃子? * * 第十天: * (1+1)*2 * 第九天 * (4+1)*2 * */ int count = 1; int day = 1; // 从第一天开始 while (day <= 10) { // 一共需要计算10天 // 每天桃子的数量: (这一天剩下的 + 1) * 2 count = (count+1) * 2; day++; // 逐渐向前推进 } System.out.println(count); int num = 0; // 统计闰年的数量 for (int i = 1000; i <= 2000; i++) { if ((i%400==0) || (i%4==0 && i%100!=0)) { System.out.print(i + "\t"); // 每发现一个闰年,num自增1 num++; // 每一次发现闰年之后判定num是否5的倍数 if (num % 5 == 0) { // num是5--10--15--20、、、之类的数值 System.out.println(); } } } System.out.println(num); } }
二、流程控制
2.1 概述
-
可以使用java中的一些关键字影响循环执行的流程
-
break
-
终止循环或者switch结构
-
-
continue
-
跳过本轮循环后面的内容,直接进入新的一轮循环
-
2.2 break
-
终止循环或者switch结构
package com.shine.for666; public class Demo06 { public static void main(String[] args) { loop:for (int i = 0; i < 10; i++) { System.out.println(i); // 判定是否有6出现 if (i == 6) { // 终止循环 break loop; } } System.out.println("OVER"); } }
2.3 continue
-
跳过本轮循环后面的内容,直接进入新的一轮循环
package com.shine.for666; public class Demo07 { public static void main(String[] args) { /** * continue * 逢7过 */ for (int i = 0; i < 10; i++) { // 跳过偶数 if (i % 2 == 0) { continue; } System.out.println(i); } System.out.println("OVER"); } }
三、循环嵌套
3.1 概述
-
循环中的内容是其他的完整的循环
-
参见if嵌套
-
3.2 打印矩形
package com.shine.nest; public class Demo01 { public static void main(String[] args) { /** * * * * * * * * * * */ // 外层循环,控制执行的行数 for (int i = 0; i < 3; i++) { // 内存循环,控制打印的列数 for (int j = 0; j < 16; j++) { System.out.print("* "); } System.out.println(); } } }
3.3 99乘法表
package com.shine.nest; public class Demo02 { public static void main(String[] args) { /** * * * * * * * * * * * * * * * 行数 i j 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 j <= i */ 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(); } } }
补充:while循环实现乘法表
3.4 百鸡问题
package com.shine.nest; public class Demo03 { public static void main(String[] args) { /** * 百鸡问题--老王买鸡 * 公鸡5钱一只 1~20 * 母鸡3钱一只 1~33 * 小鸡1钱3只 3~99 * 一百钱买鸡一百只,问有几种组合? */ for (int g = 1; g < 20; g++) { for (int m = 1; m < 33; m++) { for (int x = 3; x < 100; x+=3) { // 判定鸡的数量==100 && 钱的数量==100 if ((g+m+x==100) && (g*5+m*3+x/3==100)) { System.out.println("公鸡:" + g + ",母鸡:" + m + ",小鸡:" + x); } } } } } }
3.5 ATM案例--丐版
package com.shine.nest; import java.util.Scanner; public class ATMDemo { public static void main(String[] args) { /** * 模拟ATM操作账户的过程 */ // 创建扫描器 Scanner sc = new Scanner(System.in); int balance = 0; // 余额 int select; // 用户需要进行的操作选项 // 循环提示操作 do { // 提示并获取用户的选择 System.out.println("欢迎光临红浪漫银行,请输入您需要的业务(1:开户2:存款3:取款4:转帐5:查询余额6:修改密码0:退出):"); select = sc.nextInt(); // 使用switch判定用户选择的操作 switch (select) { case 2: // 提示输入并获取存款金额 System.out.println("欢迎使用个存款功能,请输入存款金额:"); int saveMoney = sc.nextInt(); // 余额增加 balance += saveMoney; System.out.println("存款成功..."); break; case 3: // 提示输入并获取取款金额 System.out.println("欢迎使用个取款功能,请输入取款金额:"); int takeMoney = sc.nextInt(); // 判定余额是否充足 if (balance >= takeMoney) { // 余额减少 balance -= takeMoney; System.out.println("取款成功..."); } else { System.out.println("余额不足"); } break; case 5: // 输出余额 System.out.println("账户金额:" + balance); break; default: System.out.println("您选择的业务尚未开通..."); break; } } while (select != 0); // 如果选项不是0就一直执行 System.out.println("谢谢使用,期待您再次光临!!!"); } }