
java零基础入门-核心语法篇(七) for 循环
前段时间网上有个小学题目火了,来看看

这个题目一出,网上就炸锅了,这玩意是啥?看不懂,不会做,不明白,居然是个小学题目,各种受到1万点伤害啊。后来有大神发帖解答,才让众网友满血复活。其实这个题目的本质就是找规律。和我们这次要讲的 for 循环,还有点像,我们先看看这个题怎么解答的。

看到没有,看似无厘头的题目,其实是包含规律的,找到了规律,就找到了答案。
for 循环
废话不多,先上图,左边是for循环,右边是while循环

左边的for循环,是计算从0加到100最后的值,右边是while循环,从0打印到100。我们可以看到,其实循环所需要的要素都是一样的,红色框出来的是初始化条件,蓝色框的是循环条件,满足条件才可进行下次循环,绿色框是迭代条件,进行下一次循环需要改变的变量。要素都一样,所以说我们在大部分情况是可以使用for循环替代while循环的。
再来看我标注出来的表达式1 :初始化条件,2:循环条件,3:循环体,4:迭代条件,为什么要标注一个1,2,3,4?因为他们是有执行顺序的。顺序是这样的,首先运行表达式1,再运行2,如果 2 的返回值是 true,就开始运行3,这里是计算了一个加法,做完加法再运行4。这里的顺序一定要弄清楚,2后面就开始运行3,不要认为是运行的4。这是第一次循环的顺序,第二次就不一样了,直接2,3,4跳过了1,为什么?因为初始化条件只需要运行一次,如果再次运行,i 又会变成0,第一次的 i++运算白做了,结果也会错误。所以第二次只会运行2,3,4,然后运行了很久,发现 2 返回的不是 true 了,是false,这时候,就是最后一次运行了,他只运行了一个2 ,不再进入循环体。总结一下。
第一次:1,2,3,4
第二次:2,3,4
第三次:2,3,4
。。。
最后一次:2
我们再来看看这个从0一直加到100的程序逻辑。首先我们定义了一个 sum 用来保存计算结果,这里涉及到一个变量作用范围的问题了,讲不清楚就上图。

总的来说大括号内部定义的变量,只有大括号内部可以用,出去不让用。而在大括号外面定义的变量,是可以在大括号内部使用的。

如果两个变量分别定义在自己的大括号内,是可以重名的,因为他们只在自己的地盘转,不会影响别人。比如一个班级有两个叫路飞的同学,老师喊 “路飞!”,大家都不知道老师到底喊的是哪个。而如果两个路飞在不同的班级,老师随便怎么喊都不会有问题。
回到for循环,我们之所以在for循环外面定义sum变量,是因为我要在循环结束后查看结果,如果定义在循环里面,每次都会被初始化,无法计算累加结果,所以在循环里计算,在循环外保存,每次计算完成,更新变量的值,这样循环结束我们查看变量值就知道结果了。

其实这个地方就是要理解好sum这个变量就行了,他就像个监工,每次循环里面的人干完活都要给监工报告一次,监工就记录一下最新结果。
下面我们来看看初学者必经的 99 乘法口诀表。这是个2层循环,请集中注意力,我们一步步的来完成口诀表。
99乘法表
在写乘法表的过程中,我们不仅仅要学习代码,更重要的是要学习思维过程和调试过程,如何一步步达到我们的目标。我们开始的时候说的找外星人,就是锻炼观察能力和思维能力,多图预警~









有些同学发现不对啊,我的口诀是这样念的,一七得七,二七一十四,三八妇女节...你这里是8*3,我要3*8,好吧...我们只要把打印的时候,i 和 j 的位置调换即可

好了,这样就完成乘法表了。其实我们可以看一下,写的代码并不多,但是思路很重要。有一个问题摆在你面前,你要有一个清晰的思路,如何一步步去克服困难,完成任务。
上次我们提到了一个 foreach循环,其实和for 循环差不多, 但是多用于处理对象,这个我们学了对象以后再来详细说。
网友评论