1. 程式人生 > >想學清楚迴圈 先搞定這個小學題目吧

想學清楚迴圈 先搞定這個小學題目吧

java零基礎入門-核心語法篇(七) for 迴圈 

前段時間網上有個小學題目火了,來看看

 

找外星人

這個題目一出,網上就炸鍋了,這玩意是啥?看不懂,不會做,不明白,居然是個小學題目,各種受到1萬點傷害啊。後來有大神發帖解答,才讓眾網友滿血復活。其實這個題目的本質就是找規律。和我們這次要講的 for 迴圈,還有點像,我們先看看這個題怎麼解答的。

 

三個圈一個三角

看到沒有,看似無厘頭的題目,其實是包含規律的,找到了規律,就找到了答案。

for 迴圈

廢話不多,先上圖,左邊是for迴圈,右邊是while迴圈

2種迴圈的對比

左邊的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乘法表

在寫乘法表的過程中,我們不僅僅要學習程式碼,更重要的是要學習思維過程和除錯過程,如何一步步達到我們的目標。我們開始的時候說的找外星人,就是鍛鍊觀察能力和思維能力,多圖預警~

1

 

2

 

3

 

4

 

5

 

6

 

7

 

8

 

9

 

有些同學發現不對啊,我的口訣是這樣唸的,一七得七,二七一十四,三八婦女節...你這裡是8*3,我要3*8,好吧...我們只要把列印的時候,i 和 j 的位置調換即可

 

10

好了,這樣就完成乘法表了。其實我們可以看一下,寫的程式碼並不多,但是思路很重要。有一個問題擺在你面前,你要有一個清晰的思路,如何一步步去克服困難,完成任務。

 

上次我們提到了一個 foreach迴圈,其實和for 迴圈差不多, 但是多用於處理物件,這個我們學了物件以後再來詳細說。