Java咖啡館——編寫猜數字游戲(2)
發表時間:2023-08-09 來源:明輝站整理相關軟件相關文章人氣:
[摘要]首先搭建Java程序框架。打開Eclipse,新建名為GuessNumberGame的項目,然后新建名為GuessNumber的Java類。別忘記給GuessNumber加上合適的javadoc。 ...
首先搭建Java程序框架。打開Eclipse,新建名為GuessNumberGame的項目,然后新建名為GuessNumber的Java類。別忘記給GuessNumber加上合適的javadoc。
第一步:隨機數的產生
我們可以借助Java API提供的Random類來產生一個隨機數。
首先在main函數中加入以下三行代碼:
// 新建一個隨機數產生器,然后生成一個0到99之間的整數。
Random random = new Random();
int number = random.nextInt(100);
不出所料,Eclipse就像語文老師一樣,立即在錯誤語句處劃出紅線,把鼠標移動到紅線上,可以看到具體出錯信息(見圖2)。

包(Package)的概念
Java API中包含了極其豐富、類似于Random這樣由Sun預先定義好的類(Class,如果忘記相關概念,請參考第四篇連載?《品味第一杯咖啡》),與變量作用域的問題一樣,不同包中可以有同名同姓的類,如果沒有包的概念,就會遇到命名沖突問題。此外,包還能進行安全控制,你可以規定哪些類可以被包外部調用,哪些不可以。
Random類是在java.util這個包中。可以手動在源程序頂部輸入import java.util.Random;語句來申明該程序將要使用java.util包中的Random類,然而有了Eclipse,就不用那么麻煩了?把光標移動到有紅色波浪線的Random上,然后按下Ctrl+Shift+M,Eclipse會自動幫你完成導入的工作了。此時保存一下源代碼,警告是不是消失了?希望你牢記這個快捷鍵的用法,在開發大型項目時,再好的腦子也無法牢記每個類所在的包的名字,有了Eclipse的鼎力相助,偷個懶也沒問題。
語句翻譯
第一句定義了一個類型是Random類的變量random(Java語言區分大小寫,所以Random和random是兩回事兒),并且用new操作符生成一個Random類的實例賦給random變量。還記得我們上期連載說到變量還有一種引用類型嗎?這就是一個例子。random變量實際上是一個參照,指向內存中用new操作符新建的Random類的實例。說起來很拗口,大多數情況下可以把random直接看做是一個Random類的實例,可以通過“random”加上“.操作符”來調用Random類的方法,比如用random.nextInt(100)來獲取一個0至99之間的隨機數。
第二句語句定義一個整型變量number來保存隨機產生的整數,并且用直接初始化的方法把random產生的隨機數賦給number變量。
第二步:標準輸入輸出
標準輸入輸出(Standard I/O)是指可以被應用程序使用的信息流。比如,應用程序可以從標準輸入(Standard input)讀取數據,向標準輸出(Standard output)寫數據,把出錯信息發送到標準錯誤(Standard error)。通過輸入輸出,應用程序和應用程序之間可以被串聯起來使用。雖然標準輸入輸出是從UNIX發展出來的概念,在Windows中也廣泛應用,如果你熟悉DOS,這個概念自然不陌生。
猜數字游戲主要用到標準輸入,更明確一些,就是控制臺輸入。還記得我們經常使用System.out.println進行控制臺輸出嗎?相反,要從控制臺輸入,就需要用到System.in。它是一個純粹的輸入流,而猜數字游戲主要是通過控制臺獲取玩家的字符(特別是能夠支持多國語言的Unicode字符)輸入,我們需要把它包裝成一個BufferedReader實例來使用:
BufferedReader input = new BufferedReader(
new InputStreamReader(System.in));
這時,input就是一個能處理來自控制臺輸入的、支持Unicode的、可以整行讀取的一個BufferedReader實例,比如能通過input.readLine()方法獲取玩家在控制臺整整一行的輸入了。
第三步:異常
正如阿甘的名言?Shit happens,程序中的金科玉律就是?一定會出錯。出錯并不可怕,關鍵看如何對待錯誤,有錯必究才善莫大焉。
Java語言提供了異常(Exception)處理機制幫助程序員發現并處理異常。什么是異常呢?所謂異常,就是在程序執行過程中能干擾程序正常流程的事件。導致異常的原因很多,比如文件找不到、數組越界、除以零等。當異常出現時,一個異常對象將被自動生成并傳遞給Java“運行時環境”(runtime system),說得專業一點,就是拋出一個異常。異常對象包含了異常類型、程序運行狀態等信息。“運行時環境”得到異常對象后便打斷程序的正常流程,自動尋找一個專門處理該異常的代碼塊來解決問題。這樣的代碼塊稱作異常句柄(Exception Handler)。你可以在異常句柄中嘗試修復錯誤、重試或者報錯,或者實在無法進行下去的時候來個自我了斷。如果“運行時環境”找不到異常句柄,Java程序便會自行中斷。
一個典型的異常處理是這個樣子的:
try {
statement(s);
} catch (exceptiontype1 name) {
statement(s);
} catch (exceptiontype2 name) {
statement(s);
} finally {
statement(s);
}
其中:
★try語句括起來的語句可能拋出異常。try語句至少要搭配一個catch語句或finally語句,不能單獨使用。
★catch語句必須和一個try語句配套使用,根據異常類型(exception type)分別處理不同的異常。也就是說,Java有許多預先定義的異常,你可以通過多個catch語句對它們分門別類地處理。你還可以自己定義異常類型。如果try語句塊中沒有拋出異常,這里自然不會被執行。
★finally語句也必須和一個try語句配套使用,與catch語句不同,無論try語句塊中是否拋出異常,finally所包括的語句塊都會被執行