YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Chinese, Traditional subtitles

← Cola Wars 1 - Solution

Get Embed Code
13 Languages

Showing Revision 1 created 10/12/2015 by sp8.

  1. 我要問你的第一件事情是

  2. udacicolaVotes是一個區域變數還是全域變數
  3. 你應該確定它是一個區域變數
  4. 為了弄清楚這一點 請轉至宣告這個變數的位置
  5. 就是在這里 你知道我們已經宣告這個變數 因為在這里資料類型是正確的
  6. 你可以看到它是在一個方法內宣告的 這是在兩個花括號之間
  7. 還是在方法之外宣告的呢
  8. 如果是在方法內部宣告的
  9. 那就是一個區域變量
  10. 我們可以看得很清楚 它是在方法內宣告的
  11. 因此它是一區域變數
  12. 這意味著什么呢
  13. 我們應該問我們自己
  14. 如果聲明為區域變數 將會得到什么
  15. 以這個例子 我們來思考
  16. 這是我們的電話
  17. 我們討論的是udacicola
  18. 當我們按一下udacicola按鈕時
  19. 當我們按一下這個按鈕時 這個方法開始執行
  20. 它把udacicolaVotes投票數設定為0 然后加一到udacicolaVotes
  21. 后者是0
  22. 因此udacicolaVotes變成1
  23. 因為udacicolaVotes是一個區域變量 位于這個方法的末尾
  24. 它實際上會消失 或者刪除
  25. 在這個方法的末尾 udacicolaVotes會被作為垃圾處理或消失
  26. 因為它是一個區域變數 而造成一些問題
  27. 為什么這是一個問題呢
  28. 你可以想像一下 有三個不同的人按一下按鈕
  29. 為udacicola投票 udacicolaVvotes應該是三
  30. 實際上的情況是 你第一次按下按鈕時
  31. udacicola變成0
  32. 然后加一 變成一
  33. 然后被作為垃圾被回收
  34. 從而不再存在
  35. 一個人第二次按udacicolaVotes時
  36. 就重新產生udacicolaVotes
  37. 并再次宣告
  38. 請記住 在第一次按下按鈕時 它已經被作為垃圾回收
  39. 因此需要重新創建
  40. 在它處于保留狀態時 它被設定為零
  41. 現在我們再次將它加一 但是請記住值是零
  42. 因此udacicolaVotes仍然是一 盡管按鈕被按下兩次
  43. 第三次按下時 發會生同樣的事情
  44. 它仍然是一 在此方法結束時它實際作為垃圾回收
  45. 這是第一個問題
  46. 在兩次按擊之間 并沒有累計
  47. 有多少人為udacicola投票
  48. 這里的另一個問題是 此代碼實際上會拋出錯誤
  49. 原因是 前面我說過
  50. udacicolaVotes在這里出現 它的范圍啟始于這里
  51. 在這個voteudacicola方法的末尾
  52. 它作為垃圾被回收 從而不再存在
  53. 這意味著在這里udacicolaVotes實際上不存在
  54. 更具體地說 這個變數已經超出范圍
  55. 它的范圍是這里 在這里宣告 在這里結束
  56. 但是我們嘗試在這里使用它
  57. 它不能被使用
  58. 在這個例子中 把udacicolaVotes設為區域變數不是一個正確的決定
  59. 原因有兩點
  60. 第一 在兩次按下按鈕之間它沒有保存投票數
  61. 第二 它不在演示性投票計數方法的范圍之內
  62. 因此它實際上會造成問題
  63. 這將不會被編譯
  64. 讓我們來看程式中的另一個變數