1. 程式人生 > >head first java第五章的學習

head first java第五章的學習

早上沒有帶電腦,手寫了一部分程式碼,下午學校的ic共享空間開了,興奮,立馬趕過來學習了。

總算是完成了一個簡易版的DotCom遊戲,從頭到尾的自己再走一遍吧。

分析流程,注意類,實力變數,行為的設定

遊戲說明

遊戲中有三個虛擬的連續的戰艦佔位,需要使用者猜測,每猜測一次進行相應的判斷,直到使用者將三個佔位全部擊倒。

需要兩個類

一個類用來做事(就以遊戲名命名SimpleDotCom),一個類用來測試(SimpleDotComGame)

偽碼——做事的類中

功能:

1.初始化戰艦狀態void setLocation(int[] local);

2.根據使用者的輸入判斷使用者的擊中狀態String checkYourself(String guess);

例項變數:

戰艦位置locationCell陣列

使用者擊中三次numOfHits整數=0;

method:

收到使用者輸入的數字(轉換成可以用的int)

遍歷所儲存的戰艦位置

如果使用者輸入擊中 (在戰艦儲存位置中找到了)hits

  如果沉船(使用者擊中三次numOfhits==3)sink

如果使用者沒有擊中miss

返回相應的結果result(創造區域性變數)

做事類的測試類

(用來測試做事類的準確性)

功能:建立做事類的例項,直接賦值初始化,直接賦值得到結果和預想的結果比較,如果是對的passed,錯的failed

main()的偽碼

功能:初始化戰艦狀態

(控制猜測-判斷-繼續或者結束的流程)

讓使用者輸入所猜數字,並記錄猜測次數

判斷數字所對應結果

根據結果判斷是否應該繼續

結束之後輸出使用者的猜測次數

區域性變數

戰艦的位置(用隨機數生成)int[] locals;

使用者猜測數字String guess(迴圈中專用)

數字對應的結果String result(迴圈中專用)

判斷狀態boolean isAlive

使用者猜測次數int numOfGuess

過程中

初始化戰艦狀態(例項化SimpleDotCom,隨機生成0-4中的一個數字,setLocationCells)

(控制猜測-判斷-繼續或者結束的流程)

讓使用者輸入所猜數字,helper類的方法得到int guess

並記錄猜測次數numOfGuess++

判斷數字所對應結果String result=SimpleDotCom.checkYourself(guess)

根據結果判斷是否應該繼續(如果result是sink就退出 用isAlive來控制while迴圈)

結束之後輸出使用者的猜測次數(直接輸出)

實現程式碼(依據偽碼來實現)

做事類

public class SimpleDotCom { int[] locationCell;   int numOfHits=0;

void setLocation(int[] local) { locationCell=local; }

String checkYourself(String userGuess) { int guess=Integer.parseInt(userGuess); String result="miss"; for (int cell :locationCell) { if(guess==cell) { numOfHits++; result="hits"; break;} } if(numOfHits==3) result="sink"; return result; }//checkYourself結束

}//SimpleDotCom類結束

測試類

public class SimpleDotComTestDrive {  public static void main(String[] args) { int[]locals={2,3,4}; String userGuess="2"; String testResult="failed"; SimpleDotCom dot=new SimpleDotCom(); dot.setLocation(locals); String result=checkYourself(userGuess); if(result.equals("hits")) { testResult="passed"; } System.out.println(testResult); } }//SimpleDotComTestDrive類結束

main()方法的實現(輔助類就不實現了,功能就是獲得使用者輸入並且可以丟擲異常)

public class SimpleDotComGame {  public static void main(String[] args) { GameHelper helper=new GameHelper(); boolean isAlive=true; int numOfGuess=0; SimpleDotCom dot new SimpleDotCom(); int randomNum=(int)(Math.random()*5); int[] locals={randomNum,randomNum+1,randomNum+2}; dot.setLocation(locals);

while(isAlive) { String guess=helper.getUserInput("Enter your guess number:"); String result =checkYourself(guess); numOfGuess++; if (result.equals("sink")) { isAlive==false; } }//while迴圈結束 System.out.println("You took num of guess:"+numOfGuess); }main()方法結束 }//SimpleDotComGame類結束

來一個本章總結吧

整個第五章就是一個大程式的集合,告訴我們怎麼分析一個程式,用面對物件的思維,先分析流程,在流程中找到需要的類,例項變數,和行為。實現程式碼的過程要先寫偽碼,對於需要測試的類要寫上測試碼,測試碼在編寫之前也要寫一定的偽碼讓邏輯線條清晰,讓每一個部分要做的事情和功能明確。最後實現程式碼的過程就直接對照偽碼即可實現。所以偽碼可以說是重中之重。

下一章,如同第一章看到的那樣,要用上java的api函式庫。這些函式庫不需要自己去實現,只要會運用即可。

下一章將會引入ArrayList類,與陣列進行比較(是完全擊敗還是各有好處,在不同的情形下運用?);將原有的Dotcom遊戲的bug進行改進,並且直接面對二維網路、三個戰艦進行程式設計,又應該如何處理儲存結構和演算法呢?;怎麼靈活運用java的3500個內建類呢?

由於時間關係,這次的學習活動可以將第一個點潛心修習完畢。