---
# System prepended metadata

title: U2.1、 學習像電腦一樣思考
tags: [Lidemy心得, 2020七月第三週, 進度筆記, ALG 101, 7/15, JavaScript]

---

# 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 出來是字串，而不是變數。
但這樣就無法看詳細的值，只能看最正確的值。
只有在程式碼最末端把值回傳到第一行時去改成字串有差。

---
** 圖片均為上課教材中所擷取供本人學習使用。