前言:在0.1版本中,我们得到了可迭代的超级模板,问题简单化
最近看到一本十分厉害的电子书,其中两句话让我虎躯一震,这就是大佬的思维!
第一句话:数学是用来描述万物本质的语言,是理解这个世界的底层逻辑,只有从数学上理解了一件事情,你才真正从本质上理解了这件事情
第二句话:升维思考,降维行动
内容来源:底层思维2 作者:刘润
九九乘法口诀
这次甲方提了一个需求给我们:一张图片!?对就是一张图片
文字和图片有区别吗?答案是没有,本质上他们都是信息不同形式的展示
处理图片的方法和处理文字的方法是一样的
第一步:做什么,看啊(难不成听吗,你指望作者将内容读给你听吗)
第二步:找一个切入点
老鼠回家还得找洞,那找错洞,洞里指不定就躺着一条吐舌头的辣条!!
找对切入点,可以更好的解决问题,找错了怎么办,多花一点时间而已(除非不打算解决)
在这张图片里最简单的切入点就是——1 × 1 = 1
用代码怎么实现他?试试看
public void test2() {
System.out.println("1×1=1");
}
完美!
很好,用更变量代替常量试试
分析一下 1 × 1 = 1是由什么组成的
由数字和运算符组成
数字可以用变量代替
运算符呢?用字符串代替,然后用拼接将他们连起来
public void test2() {
int x = 1;
int y = 1;
int z = 1;
System.out.println(x + "×" + y + "=" +z);
}
O~对味了
我们要重复写81次吗?(当然,你要是想可以试试!)
回到图片
我们以1 × 1 = 1 作为切入点,现在以这个切入点,做展开
为了更好理解,我们将1 × 1 = 1 更加具体点
数字1 × 数字2 = 数字3 哎,为什么用符号,因为这四个符合是不可能变的+-×÷
先看垂直的y方向,数字1向下逐渐增加1
再看水平的x方向,数字2向右逐渐增加1,并且数字3是数字1与数字2的乘
可以从上面的图清晰看到,数字1,数字2,数字3在x方向和y方向的变化
数字1和数字2每次向x方向或者y方向正移动,对应的值都会+1,但是数字3不一样,数字3是数字1和数字2在xy方向所在值的乘积
那么怎么让数字1和数字2自动增加呢
我知道,我来回答,用循环让变量自增
for (int i = 1 ; i < 10 ; i++){
System.out.print(i);
}
for (int j = 1 ; j < 10 ; j++){
System.out.print(j);
}
这样我们就可以让数字1和数字2随着x和y方向增加而增加()
那么只要在下面添加一个System.out.print(j*i);
救完成了吗?
试试,完全不可行,为什么?
因为作用域,一个花括号代表一块作用域
让他们在同一作用域就好了
这里用到循环嵌套
将作用域放在一个循环里达到同作用域
for (int i = 1; i < 10; i++) {
for (int j = 1; j < 10; j++) {
System.out.println("数字1:" +i + "数字2"+j + "数字3" + i * j);
}
}
可行了,但是没有达标,我们优化一下,他打印了至少9*9次=81次
为什么会是81次呢?
第一个循环会运行几次?在上面的循环自增测试中,打印了9次,在for循环里,第二个值i < 10就是之前说过的跳出循环,只要i自动增加到10的时候就会结束,因为10 = 10 为false,我们设置的条件为<10,大于等于都会让他返回一个false
第一个循环是这样,第二个循环呢?当然是第二个循环里的条件为false的时候才会停下来,第二个循环条件我们设置的是j<10,也就是说它会运行到j=10的情况,这个时候正好运行了9次,第二个循环跳出后,进入第一层循环
这么多文字很抽象,让我看,我也头大,简单来说,在嵌套的情况下,会按照从上到下的运行
这个是没有添加特殊跳出关键词只用条件的情况下,它会按照循环一次一次向下,测试一下
打上断点,来看看是不是和上面的图片一样
进入循环后,第一次运行,运行的是第一层循环条件满足,马上进入第二层,第二层条件马上进入第三层,当第三层条件不满足的时候自动先上回到第二层,第二层条件还是满足的,继续进入第三层
愿意的话,你可以数数,有人问你为什么不干脆写完(太懒了没办法///)
我数完了,第三层运行了9次,符合之前的内容,也符合那张图片
有了这个,我们就能精准控制数字2了
1 * 1 = 1
2 * 1 = 2,2 * 2 =4
我们发现,在y方向上,影响的是数字2,数字2的最大值是数字1,哦~我懂了,让它自增到它数字1就好了!
for (int i = 1; i < 10; i++) {
for (int j = 1; j < i; j++) {
System.out.println(i +"*" + j + "=" + i * j);
}
}
运行的时候,发现没有1×1了?是为什么?
因为第二层循环,j = i,1 = 1是什么?不满足条件,就回到了第一层循环
怎么解决它?条件是<,但是1 = 1 是等于怎么办?
小于等于~ 哦~ 秒懂~
< =解决了
nice!解决了,不过和要求不一样!
让它横着排放
提供一种思路,因为它是从上到下,在到下到上,直到第一层结束,那么我们利用这一点让它每次在第一层运行的时候自动换行就好了
for (int i = 1; i < 10; i++) {
System.out.println(" ");
for (int j = 1; j <= i; j++) {
System.out.print(" " + i +"×" + j + "=" + i * j);
}
}
总结:
内容涉及:
循环嵌套的运行规律和代码的运行规律是一样的,因为循环是代码写的,就和面向对象编程中的继承一样,父级有的,儿子也有,儿子有的父级不一定有
升维思考(广度和深度),降维行动(简单化)
(基础 + 基础 + 基础 + ...更多的基础)× 维度(影响条件) = 问题
将这个九九乘法表符合公式吗?
完全符合
(循环 + 循环嵌套 + 代码运行逻辑)× 三维(数字1,数字2,数字3) = 九九乘法表
0.1版本的问题公式待定!