# U2.1、 學習像電腦一樣思考 ###### tags: `ALG 101` `JavaScript` `2020七月第三週` `進度筆記` `Lidemy心得` `7/15` 學著不要太急著寫程式碼,寫程式和寫程式碼是兩回事,文章和寫字也是兩回事,在腦中想怎麼寫。 --- 其實我們要理解程式碼,同時在腦海中有個大概這邊要怎麼執行。 例題,陣列加總: ![](https://i.imgur.com/Eiul4MT.png) 虛擬碼步驟: 腦海中的執行流程。 1. 先假設 array = [1, 2, 3] , 也就是元素 n , 這邊有三個元素 。 2. 設定 sum = 0 3. 我們讓 i 從 0 跑到整個元素完, n-1 也就是 2 。 4. i 現在是 0 , 因為迴圈第一圈。 5. sum += arr[0] , 因為 , sum 起始是 0 + 迴圈第一圈, 0+1=1 。 6. 下一圈迴圈。 7. i 開始是 1 , 還沒超過 2 。 8. sum+= arr[1] 現在是 3 。 9. 下一圈迴圈。 10. i 現在是 2 。 11. sum+= arr[1] 現在 sum 是 3+3=6 。 12. 下一圈。 13. i 現為 3 , 超過 n-1 , done 。 14. 輸出 sum 。 --- 找最大值,範例: ![](https://i.imgur.com/rGVt824.png) 自己try: 1. 先假定最大值為陣列中的起始值。 2. 我們判斷一個值從 0 是整數開始到陣列的最後一個元素 n , 為 n-1 3. 一直做下去,直到陣列內的值大於最大值。 4. 條件是跑到最大值 = 陣列內的最大值。 5. 這時候終止假設最大值。 6. 終止迴圈。 7. 印出最大值。 解: 1. 假設 arr 是 元素 [2, 7, 5]。 2. 讓 max 為 arr[0] , 為 2 。 3. let i from 0 做到 2 。 4. i 現在是 0 。 5. 我們要判斷 arr[0] 有沒有 > 2 。 6. 不是。 7. 下一圈迴圈。 8. i 現在是 1 。 9. 判斷 arr[1] 有無 > 2 。 10. 如果 > 2 ,設 max 為 arr[1] , 7 。 11. 下一圈。 12. i 現為 2 。 13. 「判斷 arr[2] 是否 > 7」 。 14. 不是,因為 5 沒有 > 7。 15. 下一圈。 16. i 現在是 3 超過條件,因此結束。 17. 輸出 max 。 --- # U2.2、 把自己當成編譯器 ###### tags: `ALG 101` `JavaScript` `2020七月第三週` `進度筆記` `Lidemy心得` `7/15` 可以翻譯程式碼成步驟的方式。 沒有訣竅,一行一行練習。 看真的程式碼。 --- 最大值的 JS 範例: let max = arr[0] for(let i=); i<arr.lemgth; i++) { if(arr[i]>max) { max = arr[i] } } console.log(max) 虛擬碼應該不會真正的程式碼差太多。 一樣熟悉這個步驟: 1. 假設 arr 是 元素 [2, 7, 5]。 2. 讓 max 為 arr[0] , 為 2 。 3. let i from 0 做到 2 。 4. i 現在是 0 。 5. 我們要判斷 arr[0] 有沒有 > 2 。 6. 不是。 7. 下一圈迴圈。 8. i 現在是 1 。 9. 判斷 arr[1] 有無 > 2 。 10. 如果 > 2 ,設 max 為 arr[1] , 7 。 11. 下一圈。 12. i 現為 2 。 13. 「判斷 arr[2] 是否 > 7」 。 14. 不是,因為 5 沒有 > 7。 15. 下一圈。 16. i 現在是 3 超過條件,因此結束。 17. 輸出 max 。 --- # U2.3、 除蟲利器 ###### tags: `ALG 101` `JavaScript` `2020七月第三週` `進度筆記` `Lidemy心得` `7/15` Debugger 。 容易偵錯的方法。 --- ## Chrome Devtool Debugger 這是設計來可以一行一行看程式碼的偵錯方法。 以找最大值為範例,檔案存成 html 格式: <script> debugger //一定要加,有加才會跳到 source 視窗; let arr = [2, 7, 5] let max =arr[0] for(let i = 0; i<arr.length; i++) { if(arr[i] > max) { max=arr[i] } } console.log(max) </script> 存檔後可以直接執行瀏覽看看。 --- # U2.4、 多利用 `log` ###### tags: `ALG 101` `JavaScript` `2020七月第三週` `進度筆記` `Lidemy心得` `7/15` 簡單有效,加 log 加到爆~ 看 log 有沒有照預期跑。 用 dubugger 環境要先弄好,如果只是看值有沒有像預期一樣,就可以先加 log 。 --- ## 以找最大值為範例,檔案存成 html 格式,對其加 log 到爆: <script> let arr = [2, 7, 5] let max =arr[0] console.log('max:', max) for(let i = 0; i<arr.length; i++) { console.log('i=', i, 'arr[i]=', arr[i]) if(arr[i] > max) { console.log('found new max!') console.log('arr[i]:', arr[i], 'old max:', max) max=arr[i] console.log('new max:', max) } } console.log(max) </script> 初始值,迴圈,執行條件 if 、 max 值都加 log 。 可以從 log 中判斷,執行的值是否符合預期。 --- ## Chrome debugger 小 bug 最後 push 進去的值,在重新整理頁面的時候,可能會混淆在一開始 `let arr = [2, 7, 5]` 的時候是 [2, 7, 5, 3] , 但其實是最後 push 時的值,在 obj 上也是這種狀況。 <script> let arr = [2, 7, 5] console.log(arr) // 2, 7, 5 let max =arr[0] for(let i = 0; i<arr.length; i++) { if(arr[i] > max) { max=arr[i] } } arr.push(3) // 2, 7, 5, 3 console.log(max) </script> ## 解決方法,加個字串: <script> let arr = [2, 7, 5] console.log(JSON.stringify(arr)) // 在這時候把 arr 保存起來變成字串 let max =arr[0] for(let i = 0; i<arr.length; i++) { if(arr[i] > max) { max=arr[i] } } arr.push(3) // 2, 7, 5, 3 console.log(max) </script> 這時候再改變變數就無法,因為 log 出來是字串,而不是變數。 但這樣就無法看詳細的值,只能看最正確的值。 只有在程式碼最末端把值回傳到第一行時去改成字串有差。 --- ** 圖片均為上課教材中所擷取供本人學習使用。