筆記、[ALG101] 看程式


Posted by s103071049 on 2021-04-22

看程式碼=理解程式碼如何運作

除蟲教學(1)- Chrome Devtool Debugger

  • Chrome Devtool 時間差問題 : 通常會發生在,你log這個東西,但後面又去改它,這時前面log會顯示這個變數最新儲存的值。 array、object都會發生上述問題。解決方法,不要印變數,印字串JSON.stringify(arr)//它會在這個時間點把它的狀態保存起來。

除蟲教學(2)- log 加到爆

  • 可以從這些log裡面看他的值和我想像的是否一樣

練習(1)- 找次大值

// 想像拿了一副撲克牌,拿最大牌、次大牌放旁邊
// 新的牌有三種狀況,比兩個都小,比最大還大,比次大大但比最大小
let arr =[5,8,6]

let max1=-Infinity
let max2=-Infinity //兩個都設arr[0]會有狀況,ex [6,4,1]

for(var i=0;i<arr.length;i++){
    if(arr[i]>max1){
        max2=max1
        max1=arr[i]
    }
    else if(arr[i]>max2){
        max2=arr[i]
    }
}
console.log(max1,max2)
  1. 要找次大值的陣列
  2. 把最大值與次大值初始化成很小的數
  3. 迴圈掃完整個陣列
  4. i 目前是 0
  5. arr[0]=5 是否大於 max1
  6. 是,則原本的最大值變成次大值,arr[0]則變成最大值
  7. 執行下一圈迴圈,i 目前是 1
  8. arr[1]=8 是否大於 max1=5
  9. 是,則max2=5,max1=8
  10. 執行下一圈迴圈,i 目前是 2
  11. arr[2]=6 是否大於 max1=5
  12. arr[2]=6 是否大於 max2=5
  13. 是,則max2=6
  14. 下一圈迴圈,i 目前是 3 ,超出迴圈範圍,迴圈結束
  15. 印出 max1 and max2

練習(2)- 字串轉大寫

ASCII code : (a=97,z=122;A=65,Z=90) 中間轉換差 32

// 法一、字串是否為小寫:判斷ASCII CODE 是否介於97~122
// 法二、字串直接比大小,比的是字典序 

/* 小寫轉大寫、ASCII code-32
   String.fromCharCode(parameter) parameter為 ASCII code
   string.charCodeAt(index) 我要知道 string[index] 的charCode 是多少   
*/ 

let str = "Hi"
let ans = ""

for(let i=0 ; i<str.length ; i++){
    let code = str.charCodeAt(i)
    if(code >= 97 && code <= 122){
        ans+=String.fromCharCode(code-32)
    }
    else{
        ans+=str[i]

    }
}
console.log(ans)
  1. 宣告字串與ans的初始值
  2. 迴圈從 0 開始
  3. i=0,獲得 str[0]=H 的 ASCII code (72)
  4. 判斷是否符合條件,不符合 => 進入else區塊,更改ans => ans="H"
  5. 下一圈迴圈,i=1,獲得 str[1]=i 的 ASCII code (105)
  6. 判斷是否符合條件,符合,ans + 變成大寫後的結果 => ans="HI"
  7. 下一圈迴圈,i=2,超出迴圈範圍,迴圈結束
  8. 印出 ans // ans="HI"

練習(3)- 刪除特定字元

不要想成刪除,想成略過


let str ="hello"
let deleted="l"
let ans=""
for(let i=0;i<str.length;i++){
    if(str[i]!==deleted){
        ans+=str[i]

    }
}
console.log(ans)
  1. 宣告字串、要刪除的字、ans的初始值
  2. 迴圈從0開始
  3. i=0,判斷是否符合條件,符合,更改ans=> ans="h"
  4. 下一圈迴圈,i=1,判斷是否符合條件,符合,更改ans=> ans="he"
  5. 下一圈迴圈,i=2,判斷是否符合條件,不符合
  6. 下一圈迴圈,i=3,判斷是否符合條件,不符合
  7. 下一圈迴圈,i=4,判斷是否符合條件,符合,更改ans=> ans="heo"
  8. 下一圈迴圈,i=5,超出迴圈範圍,迴圈結束
  9. 印出 ans

作業(1)- 找次小值

let arr=[10,8,6]
let min1=Infinity //最小值
let min2=Infinity //次小值

for(let i=0;i<arr.length;i++){
    if(arr[i]<min1){
        min2=min1
        min1=arr[i]
    }
    else if(arr[i]<min2){
        min2=arr[i]
    }
}
console.log(min1,min2) //6,8
  1. 宣告陣列並初始化最小值與次小值
  2. 迴圈從0開始
  3. i=0,判斷是否符合條件,是(arr[0]=10 < 最小值),將次小值更新成最小值,再將最小值更新成arr[0]=10, [目前:最小=10,次小=無窮大]
  4. 下一圈迴圈,i=1,判斷是否符合條件,是,將次小值更新成最小值,再將最小值更新成arr[1]=8, [目前:最小=8,次小=10]
  5. 下一圈迴圈,i=2,判斷是否符合條件,是,將次小值更新成最小值,再將最小值更新成arr[2]=6, [目前:最小=6,次小=8]
  6. 下一圈迴圈,i=3,超出迴圈範圍,迴圈結束
  7. 印出最小值與次小值

作業(2)- 大小寫互換

let str="hELLo"
let ans=""

for(let i=0;i<str.length;i++){
    let code=str.charCodeAt(i)
    if(code>=97&&code<=122){ //字母小寫的狀況
        ans+=String.fromCharCode(code-32)
    }
    else if(code>=65&&code<=90){
        ans+=String.fromCharCode(code+32)
    }
    else{
        ans+=str[i]
    }
}
console.log(ans)
  1. 初始化字串、初始化變數
  2. 迴圈從0開始
  3. i=0,獲得str[0]=h 的ASCII code (104)
  4. 判斷是否符合條件,是 (104 >= 97 且 104 =< 122),將其轉成大寫(ASCII code-32),更改ans => ans="H"
  5. 下一圈迴圈,i=1,獲得str[1]=E 的ASCII code (69)
  6. 判斷是否符合條件,否 (69 >= 97 且 69 =< 122),
  7. 判斷是否符合條件,是 (69 >=65 且 69 <= 90),將其轉成小寫(ASCII code+32) ,更改ans => ans="He"
  8. 重複執行迴圈,直到 i=5,超出迴圈範圍,迴圈結束
  9. 印出結果

作業(3)- 印出因數

let num=30
for(let i=1;i<=num;i++){
    if(num%i===0){
        console.log(i)
    }
}
  1. 初始化數字
  2. 迴圈從1開始
  3. i=1,判斷條件是否符合條件,是(數字可以被i=1整除),將i印出來=>印出1
  4. 下一圈迴圈,i=2,判斷條件是否符合條件,是(數字可以被i=2整除),將i印出來=>印出2
  5. 下一圈迴圈,i=3,判斷條件是否符合條件,是(數字可以被i=3整除),將i印出來=>印出3
  6. 下一圈迴圈,i=4,判斷條件是否符合條件,否(數字不可以被i=3整除)
  7. 重複執行迴圈,直到 i=31,超出迴圈範圍,迴圈結束

#看程式碼







Related Posts

[JS101] JavaScript - Function

[JS101] JavaScript - Function

[Golang] Reflect

[Golang] Reflect

[Note] Vite 組態配置(持續更新)

[Note] Vite 組態配置(持續更新)


Comments