終於可以寫有一點意思的代碼。接下來,會通過幾個小例子,來學習java,不過開始之前,先說說按什麼步驟來寫程序, 每個人都有自己的開發習慣,此處也並非標准的步驟,所以此處也只是對像我一樣的小白的一個參考。
按照慣例,看看這次的內容:
一、寫一個程序的步驟
剛介入編程世界時,都是練語法,然後寫個xx管理系統,都是想起來啥寫啥,毫無章法可言,但要成為一個優秀程序員的,必須得有一套完整的程序開發流程,這會讓你更快,更清晰的開發項目。
寫每個類時都是按照 "偽碼 --> 測試代碼 -->目標代碼" 來寫的,這是一個好方法,反正誰用誰知道,用了之後再也戒不掉。
二、為什麼要先寫測試代碼呢?
這個思想來源於極限編程,Extreme Programming(簡稱XP),這樣做可以是你編程更快更簡單,我感覺還可以。通過測試代碼,你知道的類的方法需要完成什麼樣功能才算合格,這就很簡單啦,你只需讓你的編寫的類通過測試代碼就可以啦,而且,以後有更好的技術實現當下功能時,不怕修改完代碼,出現bug,只需通過你原來的測試就行啦,所謂的單元測試好像就是這樣的。
三、一個小例子踐行上邊的編程思想
為什麼不說XP了呢,這個不是一時能說完的,可以自己查資料。
寫一個DotCom游戲,當然沒有期望任何的圖形界面,新手總是這樣干,原來我也是如此啊,以後會有圖形界面程序的。java是一種後端語言,組織著一個項目的邏輯關系,所以,還是多練練邏輯吧,不要妄想著用純java做一個精美的界面。
這是一個攻擊達康網絡的游戲,感覺好高大上啊,然而它就是一個猜數字的小游戲。在7 x 7的格子上有三個達康公司,每個達康公司,占三個連續的格子。他們的位子隨機生成,你通過猜(A0, 或F5),來判斷你是否擊中目標,沒猜中,結果為"miss", 猜中"hit",如果把一個DotCom的三個坐標都猜中,結果為"kill".
這個格子是不存在的,你知,我知,玩家知(不知有沒有人玩)。不過,我們剛開始寫一個真正有意義的程序嗎,所以,我們降低難度,化2D為一維。就變成下邊的樣子啦。
一步一步來:
這個程序最主要的一個類是是什麼?當然是這個DotCom啦。
它有什麼主要的功能呢?是擊打的對象,有自己的坐標,和檢驗自己是否被擊中。
所以它的屬性是:儲存所在格子信息的 int[] localCells數組,和一個記錄自己被擊中幾次的屬性,int numOfHits。方法:檢查自己是否被擊中的方法:checkYourself(), 它是有參數的來接受玩家的猜測值,並且有返回結果。所以, String checkYourself(int userGuess).
總結一下主要的屬性和方法:
當然,還有其他的方法,比如對屬性的封裝方法,setter(), getter(),這些都不是brain method,所以不提啦。
把主要的方法的偽碼寫出來:
1 //不是正規的偽碼,講清楚流程就行 2 checkYourself(userGuess): 3 result = "miss" 4 for(i:localCells)//循環,一一判斷userGuess是否等於localCells中的值 5 if userGuess == i 6 numOfHits += 1 7 result = "hit" 8 break 9 if numOfHits == 3 10 result = "kill" 11 return result
好啦,寫real codes,but test codes firstly.
1 public class Test { 2 public static void main(String[] args) { 3 SimpleDotCom dotCom = new SimpleDotGom(); 4 int[] localCells = {2, 3, 4};//指定DotCom的位置,真實游戲中,是隨機生成的 5 dotCom.setLocalCells(localCells); 6 int guess = 2;//玩家猜的數字 7 String result = dotCom.checkYourself(guess);//測試的方法 8 System.out.println("result = " + result); 9 } 10 }
好啦,寫SimpleDotCom:
1 public class SimpleDotCom { 2 private int[] localCells; 3 private int numOfHits; 4 public void setLocalCells(int[] localCells) { 5 this.localCells = localCells; 6 } 7 public String checkYourself(int userGuess) { 8 String result = "miss"; 9 for(int i : localCells) { 10 if ( i == userGuess) { 11 result = "hit"; 12 numOfHits ++; 13 break; 14 } 15 } 16 if (3 == numOfHits){//這是一個編程規范的一個小細節,不要不注意哦 17 result = "kill"; 18 } 19 return result; 20 } 21 }
看結果:
果然如自己所料啊,今天就到這裡。其實這個程序bug多多,你可以試著找找並改改哈,下次,寫個更好的。
說個細節問題。
大家都知道判斷一個數是奇偶的方法,兩種最常用的,num % 2 == 0 or num % 2 == 1,可能大家會有點疑惑,這不一樣嗎?是嗎?
結果就是不一樣:
但是python沒有這個問題:
這是語言特性決定的,所以,以後要用 num % 2 == 0 來判斷,不要在用 num % 2 == 1啦,這就是細節的力量。
每日一句:
Life doesn't just happen for you; you receive everything in your life based on what you've given.
你今天的一切源於昨天,同樣你明天的一切取決於今天的表現。