Lesson 08

字面量规范

使用原值

代码中 如果有 计算出来的字面量, 那么需要写是怎么计算的

使用前
1 2 3 4 5 6 7 8
int[] arr = {6, 7, 3, 8, 4}; for (int i = 0; i < 5; i++) { Console.print(arr[i]); if (i != 4) { Console.print(", "); }}
使用后
1 2 3 4 5*6 7 8
int[] arr = {6, 7, 3, 8, 4}; for (int i = 0; i < 5; i++) { Console.print(arr[i]); if (i != 5 - 1) { Console.print(", "); }}

为业务值定义变量

使用前
1 2 3 4 5 6 7 8
int[] arr = {6, 7, 3, 8, 4}; for (int i = 0; i < 5; i++) { Console.print(arr[i]); if (i != 5 - 1) { Console.print(", "); }}
使用后
1 2+3*4 5*6 7 8
int[] arr = {6, 7, 3, 8, 4};int size = 5;for (int i = 0; i < size; i++) { Console.print(arr[i]); if (i != size - 1) { Console.print(", "); }}

注意

引用变量

任何值 如果能从已知变量中计算出来, 那么就使用 已知变量

使用前
1 2 3 4 5 6 7 8
int[] arr = {6, 7, 3, 8, 4}; for (int i = 0; i < 5; i++) { Console.print(arr[i]); if (i != 5 - 1) { Console.print(", "); }}
使用后
1 2 3*4 5*6 7 8
int[] arr = {6, 7, 3, 8, 4}; for (int i = 0; i < arr.length; i++) { Console.print(arr[i]); if (i != arr.length - 1) { Console.print(", "); }}

最终效果

程序中只能出现 业务数据 和 -1, 0, 1, 2

原始数据值 只能出现一次

复杂嵌套

概览

基础规则

if, switch, for, while 可以随意嵌套

样例
1 2 3 4 5 6 7 8 9 10 11
for (...) { if (...) { ... } while(...) { if (...) { ... } }}
留意

换行缩进

变量作用域及生命周期

循环嵌套

需求

小明 每天 吃3顿饭, 吃完了就睡觉

三天过去了, 小明干了什么

< < < < < < < < < < < <
吃饭吃饭吃饭睡觉吃饭吃饭吃饭睡觉吃饭吃饭吃饭睡觉
代码
1 2 3 4 5 6 7 8 9 10 11 12
Console.println("吃饭");Console.println("吃饭");Console.println("吃饭");Console.println("睡觉");Console.println("吃饭");Console.println("吃饭");Console.println("吃饭");Console.println("睡觉");Console.println("吃饭");Console.println("吃饭");Console.println("吃饭");Console.println("睡觉");
消除重复1
1+2 3 4 5 6+7-8-9-10-11-12-13-14-
for (int i = 0; i < 3; i++){ Console.println("吃饭"); Console.println("吃饭"); Console.println("吃饭"); Console.println("睡觉");}Console.println("吃饭");Console.println("吃饭");Console.println("吃饭");Console.println("睡觉");Console.println("吃饭");Console.println("吃饭");Console.println("吃饭");Console.println("睡觉");
消除重复2
1 2+3 4+5-6-7 8
for (int i = 0; i < 3; j++){ for (int j = 0; j < 3; i++){ Console.println("吃饭"); } Console.println("吃饭"); Console.println("吃饭"); Console.println("睡觉");}

内外循环

内循环

外循环

执行顺序

内循环秒针
外循环分针

秒针走一圈,分针走一格

11
for (12; 13; 14) {
    21
    for (22; 23; 24) {
        31
    }
    25
}
15

11
12 13
21, 22 23, 31 24 23, 31 24 23, ... 31 24 23, 25, 14 13
21, 22 23, 31 24 23, 31 24 23, ... 31 24 23, 25, 14 13
...

21, 22 23, 31 24 23, 31 24 23, ... 31 24 23, 25, 14 13
15

复杂嵌套编程方法

代码消除

跟 一般 for 语句一样

练习 1
< < < < <
* * * * ** * * * * * * * * *
练习 2
< < < <
1 x 1 = 1, 1 x 2 = 2, ... 1 x 9 = 92 x 2 = 4, 2 x 3 = 6, ... 2 x 9 = 9...8 x 8 = 64, 8 x 9 = 729 x 9 = 81

剥洋葱大法

原始问题
1
// 输出 100 以内所有的质数
使用 for 降级
1+2 3+
for (int i = 2; i <= 100; i++) { // 给定一个数 i, 如果是质数, 就把它输出出来}
使用 if 降级
1 2+3 4 5+6+7+8
for (int i = 2; i <= 100; i++) { boolean test; // 检测一个数 i, 是否是质数 if (test) { Console.println(i); }}
伪代码分析

质数是只能被 1 和 自己整除

也就是说, 从 2 到 它自己, 没有任何数能把它整除

1 2*3 4 5 6 7 8 9 10*11 12 13
for (int i = 2; i <= 100; i++) { boolean isPrime = true; // 对 i 进行检查 // (从 2 到 i, 不包含 i) { // 应该没有任何能整除 i 的 // 一旦发现, 就不是质数了 // } if (isPrime) { Console.println(i); }}
使用 for 降级
1 2 3 4+5 6 7+8 9 10 11 12
for (int i = 2; i <= 100; i++) { boolean isPrime = true; for (int factor = 2; factor < i; factor++){ // 应该没有任何能整除 i 的 // 一旦发现, 就不是质数了 } if (isPrime) { Console.println(i); }}
伪代码分析
1 2 3 4 5*6*7*8 9 10 11 12 13
for (int i = 2; i <= 100; i++) { boolean isPrime = true; for (int factor = 2; factor < i; factor++){ // 如果 (factor 能整除 i) { // i 就不是质数 // } } if (isPrime) { Console.println(i); }}
使用 if 降级
1 2 3 4 5*6*7*8*9 10 11 12 13 14
for (int i = 2; i <= 100; i++) { boolean isPrime = true; for (int factor = 2; factor < i; factor++){ if (i % factor == 0){ isPrime = false; break; } } if (isPrime) { Console.println(i); }}

ZZAX 微信公众

文档一更新,立刻告诉你