今天正式进入Java循环的学习,循环是编程中最重要的控制结构之一。通过一天的练习,我系统学习了 for 循环、while 循环、循环嵌套以及 break/continue 控制语句。以下是今天的学习内容和代码笔记。
一、for循环
for 循环是最常用的循环结构,由三部分组成:初始化、条件判断、步进操作。
1. 基础for循环
第一个练习是打印10次跳跃:
1 2 3
for(inti=1; i <= 10; i++){ System.out.println("第" + i + "次跳跃"); }
然后是正序和倒序打印数字:
1 2 3 4 5 6 7 8
// 正序打印 1-5 for (inti=1; i <= 5; i++){ System.out.println(i); } // 倒序打印 5-1 for (inti=5; i >= 1; i--){ System.out.println(i); }
2. 累加求和
利用累加器变量,配合 for 循环实现求和:
1 2 3 4 5 6 7 8 9 10 11 12 13
// 求1-5的和 intsum=0; for (inti=1; i <= 5; i++){ sum = sum + i; } System.out.println(sum); // 15
// 求1-100的偶数和 intsum=0; for (inti=2; i <= 100; i += 2){ sum = sum + i; } System.out.println(sum); // 2550
要点:步长 i += 2 可以实现跳跃式遍历,只取偶数。
3. 循环中的条件判断
统计两个数之间能同时被3和5整除的数字个数:
1 2 3 4 5 6 7 8 9 10 11
Scannersc=newScanner(System.in); inta= sc.nextInt(); intb= sc.nextInt(); if (a > b){ intc= b; b = a; a = c; } // 保证 a <= b intsum=0; for (inti= a; i <= b; i++){ if(i % 3 == 0 && i % 5 == 0){ sum++; } } System.out.println(sum);
4. 斐波那契数列
求斐波那契数列第20项:
1 2 3 4 5 6 7
inta=0, b = 1, c = 0; for(inti=1; i <= 20; i++){ if (i == 1) { c = a; } elseif (i == 2) { c = b; } else { c = a + b; a = b; b = c; } } System.out.println(c); // 4181
要点:变量滚动更新 a = b; b = c; 是递推的核心。
5. 交替数列求和
计算 1 - 2 + 3 - 4 + ... + n:
1 2 3 4 5 6 7 8
Scannersc=newScanner(System.in); intn= sc.nextInt(); intsum=0; for (inti=1; i <= n; i++){ if (i % 2 == 1){ sum += i; } else { sum -= i; } } System.out.println(sum);
要点:通过奇偶判断控制加减,sum += 和 sum -= 简洁高效。
二、while循环
while 循环适合循环次数未知的场景,只要条件为 true 就一直执行。
1. 基础while循环
1 2 3 4 5
inti=1; while (i <= 10) { System.out.println("跳跃了" + i + "次"); i++; }
注意:while 循环中一定要有让条件趋向 false 的操作,否则会死循环!
2. 复利计算 —— 本金翻倍需要多少年
1 2 3 4 5 6 7 8
doubleoriginal=100000; intyear=0; doublenow= original; while (now < original * 2) { now = now * 1.017; year++; } System.out.println(year);
Scannersc=newScanner(System.in); intn= sc.nextInt(); n = n < 0 ? -n : n; // 处理负数 intw=0; while (n > 0){ w = w + n % 10; // 取末位数字并累加 n = n / 10; // 去掉末位 } System.out.println(w);
要点:n % 10 取末位、n / 10 去末位,循环直到 n 为 0。
三、循环嵌套
循环嵌套是今天的重头戏,通过外层循环控制行、内层循环控制列,可以打印各种图形。
1. 矩形
1 2 3 4 5 6
for (inti=1; i <= 4; i++){ for (intj=1; j <= 5; j++){ System.out.print("x"); } System.out.println(""); }
输出:
1 2 3 4
xxxxx xxxxx xxxxx xxxxx
2. 三角形
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// 左对齐正三角 for (inti=1; i <= 5; i++){ for (intj=1; j <= i; j++){ System.out.print("x"); } System.out.println(""); }
// 左对齐倒三角 for (inti=1; i <= 5; i++){ for(intj=5; j >= i; j--){ System.out.print("x"); } System.out.println(""); }
要点:内层循环次数依赖外层变量 j <= i(递增三角)和 j >= i(递减三角)。
3. 居中梯形
1 2 3 4 5 6 7 8 9
for (inti=1; i <= 3; i++){ for (intj=1; j <= 3 - i; j++){ System.out.print(" "); } for (intj=1; j <= 2 * i + 1; j++){ System.out.print("x"); } System.out.println(); }
输出:
1 2 3
xxx xxxxx xxxxxxx
4. 实心菱形
1 2 3 4 5 6 7 8 9
for (inti=1; i <= 7; i++){ for (intj=1; j <= (4 - i < 0 ? i - 4 : 4 - i); j++){ System.out.print(" "); } for (intj=1; j <= 7 - 2 * (4 - i < 0 ? i - 4 : 4 - i); j++){ System.out.print("*"); } System.out.println(); }
输出:
1 2 3 4 5 6 7
* *** ***** ******* ***** *** *
要点:利用 |4-i| 的绝对值思想控制空格和星号数量,实现上下对称。
5. 空心菱形
1 2 3 4 5 6 7 8 9 10 11
for (inti=1; i <= 5; i++){ for (intj=1; j <= (3 - i > 0 ? 3 - i : i - 3); j++){ System.out.print(" "); } System.out.print("x"); if (i == 1 || i == 5) { System.out.println(); continue; } for (intj=1; j <= 5 - 2 * ((3 - i > 0 ? 3 - i : i - 3) + 1); j++){ System.out.print(" "); } System.out.println("x"); }
要点:顶行和底行只打印一个 x 后直接 continue,中间行在两端打印 x,中间填空格。
6. 九九乘法表
1 2 3 4 5 6
for (inti=1; i <= 9; i++){ for (intj=1; j <= i; j++){ System.out.print("" + j + "*" + i + "=" + i * j + "\t"); } System.out.println(); }
要点:\t 制表符用于对齐输出,j <= i 控制三角区域。
四、循环控制 —— break 和 continue
1. break —— 质数判断
1 2 3 4 5 6 7 8
Scannersc=newScanner(System.in); intnum= sc.nextInt(); intn= num - 1; while (true) { if (n == 1){ System.out.println("是质数"); break; } elseif (num % n == 0){ System.out.println("不是质数"); break; } n--; }
要点:while(true) 配合 break 实现不确定次数的循环,一旦找到证据立即退出。
2. continue —— 逢7过
1 2 3 4 5 6 7
for (inti=1; i <= 100; i++) { if(i % 10 == 7 || i / 10 == 7 || i % 7 == 0){ System.out.println("过"); continue; } System.out.println(i); }
要点:continue 跳过本次循环的剩余代码,直接进入下一次循环。
3. 综合实战 —— 跳过含4的数字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Scannersc=newScanner(System.in); int n; while (true) { System.out.print("请输入整数n(1-100000):"); n = sc.nextInt(); if (n >= 1 && n <= 100000) { break; } System.out.println("输出不合法,请重新输入"); } for (inti=1; i <= n; i++){ if (i % 4 == 0 || i / 10 % 10 == 4 || i % 10 == 4 || i / 100 % 10 == 4 || i / 1000 % 10 == 4 || i / 10000 % 10 == 4){ continue; } System.out.println(i); }