明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

Java咖啡館——編寫猜數(shù)字游戲(2)

[摘要]首先搭建Java程序框架。打開Eclipse,新建名為GuessNumberGame的項目,然后新建名為GuessNumber的Java類。別忘記給GuessNumber加上合適的javadoc。 ...

    

  首先搭建Java程序框架。打開Eclipse,新建名為GuessNumberGame的項目,然后新建名為GuessNumber的Java類。別忘記給GuessNumber加上合適的javadoc。

  第一步:隨機數(shù)的產(chǎn)生

  我們可以借助Java API提供的Random類來產(chǎn)生一個隨機數(shù)。

  首先在main函數(shù)中加入以下三行代碼:

// 新建一個隨機數(shù)產(chǎn)生器,然后生成一個0到99之間的整數(shù)。
Random random = new Random();
int number = random.nextInt(100);

  不出所料,Eclipse就像語文老師一樣,立即在錯誤語句處劃出紅線,把鼠標移動到紅線上,可以看到具體出錯信息(見圖2)。

Java咖啡館——編寫猜數(shù)字游戲(2)

 

  包(Package)的概念

  Java API中包含了極其豐富、類似于Random這樣由Sun預先定義好的類(Class,如果忘記相關(guān)概念,請參考第四篇連載?《品味第一杯咖啡》),與變量作用域的問題一樣,不同包中可以有同名同姓的類,如果沒有包的概念,就會遇到命名沖突問題。此外,包還能進行安全控制,你可以規(guī)定哪些類可以被包外部調(diào)用,哪些不可以。

  Random類是在java.util這個包中?梢允謩釉谠闯绦蝽敳枯斎雐mport java.util.Random;語句來申明該程序?qū)⒁褂胘ava.util包中的Random類,然而有了Eclipse,就不用那么麻煩了?把光標移動到有紅色波浪線的Random上,然后按下Ctrl+Shift+M,Eclipse會自動幫你完成導入的工作了。此時保存一下源代碼,警告是不是消失了?希望你牢記這個快捷鍵的用法,在開發(fā)大型項目時,再好的腦子也無法牢記每個類所在的包的名字,有了Eclipse的鼎力相助,偷個懶也沒問題。

  語句翻譯

  第一句定義了一個類型是Random類的變量random(Java語言區(qū)分大小寫,所以Random和random是兩回事兒),并且用new操作符生成一個Random類的實例賦給random變量。還記得我們上期連載說到變量還有一種引用類型嗎?這就是一個例子。random變量實際上是一個參照,指向內(nèi)存中用new操作符新建的Random類的實例。說起來很拗口,大多數(shù)情況下可以把random直接看做是一個Random類的實例,可以通過“random”加上“.操作符”來調(diào)用Random類的方法,比如用random.nextInt(100)來獲取一個0至99之間的隨機數(shù)。

  第二句語句定義一個整型變量number來保存隨機產(chǎn)生的整數(shù),并且用直接初始化的方法把random產(chǎn)生的隨機數(shù)賦給number變量。

  第二步:標準輸入輸出

  標準輸入輸出(Standard I/O)是指可以被應用程序使用的信息流。比如,應用程序可以從標準輸入(Standard input)讀取數(shù)據(jù),向標準輸出(Standard output)寫數(shù)據(jù),把出錯信息發(fā)送到標準錯誤(Standard error)。通過輸入輸出,應用程序和應用程序之間可以被串聯(lián)起來使用。雖然標準輸入輸出是從UNIX發(fā)展出來的概念,在Windows中也廣泛應用,如果你熟悉DOS,這個概念自然不陌生。
猜數(shù)字游戲主要用到標準輸入,更明確一些,就是控制臺輸入。還記得我們經(jīng)常使用System.out.println進行控制臺輸出嗎?相反,要從控制臺輸入,就需要用到System.in。它是一個純粹的輸入流,而猜數(shù)字游戲主要是通過控制臺獲取玩家的字符(特別是能夠支持多國語言的Unicode字符)輸入,我們需要把它包裝成一個BufferedReader實例來使用:

BufferedReader input = new BufferedReader(
new InputStreamReader(System.in));

  這時,input就是一個能處理來自控制臺輸入的、支持Unicode的、可以整行讀取的一個BufferedReader實例,比如能通過input.readLine()方法獲取玩家在控制臺整整一行的輸入了。

  第三步:異常

  正如阿甘的名言?Shit happens,程序中的金科玉律就是?一定會出錯。出錯并不可怕,關(guān)鍵看如何對待錯誤,有錯必究才善莫大焉。

  Java語言提供了異常(Exception)處理機制幫助程序員發(fā)現(xiàn)并處理異常。什么是異常呢?所謂異常,就是在程序執(zhí)行過程中能干擾程序正常流程的事件。導致異常的原因很多,比如文件找不到、數(shù)組越界、除以零等。當異常出現(xiàn)時,一個異常對象將被自動生成并傳遞給Java“運行時環(huán)境”(runtime system),說得專業(yè)一點,就是拋出一個異常。異常對象包含了異常類型、程序運行狀態(tài)等信息!斑\行時環(huán)境”得到異常對象后便打斷程序的正常流程,自動尋找一個專門處理該異常的代碼塊來解決問題。這樣的代碼塊稱作異常句柄(Exception Handler)。你可以在異常句柄中嘗試修復錯誤、重試或者報錯,或者實在無法進行下去的時候來個自我了斷。如果“運行時環(huán)境”找不到異常句柄,Java程序便會自行中斷。

  一個典型的異常處理是這個樣子的:

try {
statement(s);
} catch (exceptiontype1 name) {
statement(s);
} catch (exceptiontype2 name) {
statement(s);
} finally {
statement(s);
}

  其中:

  ★try語句括起來的語句可能拋出異常。try語句至少要搭配一個catch語句或finally語句,不能單獨使用。
  ★catch語句必須和一個try語句配套使用,根據(jù)異常類型(exception type)分別處理不同的異常。也就是說,Java有許多預先定義的異常,你可以通過多個catch語句對它們分門別類地處理。你還可以自己定義異常類型。如果try語句塊中沒有拋出異常,這里自然不會被執(zhí)行。
  ★finally語句也必須和一個try語句配套使用,與catch語句不同,無論try語句塊中是否拋出異常,finally所包括的語句塊都會被執(zhí)行