结对项目
?
一.?? 題目簡介:??
功能要求:該程序用圖形界面實(shí)現(xiàn)下面功能:用計(jì)算機(jī)產(chǎn)生一個100以內(nèi)的隨機(jī)數(shù),游戲者進(jìn)行猜數(shù),猜中即勝,猜不中,提示是大了還是小了,繼續(xù)猜,直至猜對為止。游戲結(jié)束后給出評語并計(jì)算出玩家所用的時間與所猜的次數(shù)。
具體要求:
(1) 輸入任意一個數(shù)字。數(shù)字的要求是1—100的自然數(shù)即可。
(2) 系統(tǒng)對您輸入的數(shù)字進(jìn)行判斷。如果玩家輸入的數(shù)字與計(jì)算機(jī)隨機(jī)生成數(shù)相比較,輸入的數(shù)字比隨機(jī)生成數(shù)小.系統(tǒng)將提示您,數(shù)字太小請您重新輸入。如果玩家輸入的數(shù)字與計(jì)算機(jī)隨機(jī)生成數(shù)相比較,如果輸入的數(shù)字比隨機(jī)生成數(shù)大。系統(tǒng)將提示您,數(shù)字太大請您重新輸入。如果玩家輸入的字符不是合法字符,系統(tǒng)將提示您,您輸入的數(shù)字不合法,請從新輸入。
(3) 每猜測一次,系統(tǒng)會記錄下來,游戲結(jié)束后,顯示共猜測多少次。
(4) 歡迎界面:通過這里提供的選項(xiàng)(或按鈕),進(jìn)入游戲界面。
(5) 游戲界面提供“獲取隨機(jī)數(shù)”按鈕,系統(tǒng)獲取到隨機(jī)數(shù),游戲者輸入自己的猜測結(jié)果,通過按“確認(rèn)”按鈕完成輸入。每次提示輸入猜測結(jié)果時,給出猜測的準(zhǔn)確度提示。
(6) 按“獲取隨機(jī)數(shù)”按鈕,繼續(xù)游戲。
(7) 游戲結(jié)束后給出評語并計(jì)算出玩家所用的時間與所猜次數(shù)。
界面要示:用圖形界面實(shí)現(xiàn)。
二.?? 結(jié)對分工及過程
在本次作業(yè)中,我劉效玲負(fù)責(zé)寫代碼,文麗君負(fù)責(zé)測試代碼。
github鏈接:http://github.com/wenlijun/
設(shè)計(jì)過程:
(1)隨機(jī)數(shù)的獲取
功能描述:玩家輸入一個數(shù)字,數(shù)字的范圍在1-100之間,系統(tǒng)獲取隨機(jī)數(shù)。
?
(2)輸入輸出模塊
功能描述:對玩家輸入的數(shù)字進(jìn)行判斷和提示。如果玩家輸入的不是系統(tǒng)要求的數(shù)字,系統(tǒng)將提示您,您輸入的不是數(shù)字請重新輸入.。如果玩家輸入的數(shù)字與隨機(jī)生成數(shù)相比較,比隨機(jī)生成數(shù)小.系統(tǒng)提示您,數(shù)字太小請您重新輸入。如果玩家輸入的數(shù)字與隨機(jī)生成數(shù)相比較,比隨機(jī)生成數(shù)大.系統(tǒng)提示您,數(shù)字太大請您重新輸入。
?
? ? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? ? ? ? ? ? ?? ?? ??? ???? ??? ??
| ???? 輸入輸出模塊 ???? ???? |
?? ? ?? ?? ??? ???? ??? ??
| ???? 對玩家輸入的數(shù)字進(jìn)行判斷和提示 ???? ???? |
?? ? ?? ?? ??? ???? ??? ??
| ???? 您輸入的不是數(shù) 字 ???? ???? |
?? ? ?? ?? ??? ???? ??? ??
| ???? 您輸入的太 小 ???? ???? |
?? ? ?? ?? ??? ???? ??? ??
| ???? 您輸入的太 大 ???? ???? |
?? ? ?? ?? ??? ???? ??? ??
| ???? 猜對了 ???? ???? |
??
?
圖3 輸入輸出模塊圖
?
(3) 判斷模塊
功能描述:算出所用時間在玩家猜中時給出其所用時間,系統(tǒng)給出對其水平的判斷和是否繼續(xù)的提示;對玩家要求判斷執(zhí)行。
?
? ? ? ?? ?? ??? ???? ??? ??
| ???? 判斷模塊 ???? ???? |
?? ? ?? ?? ??? ???? ??? ??
| ???? 時間計(jì)算功 能 ???? ???? |
?? ? ?? ?? ??? ???? ??? ??
| ???? 系統(tǒng)對玩家的水平做出 ???? 判斷 ???? ???? |
?? ? ?? ?? ??? ???? ??? ??
| ???? 提示玩家是否繼 續(xù) ???? ???? |
??
?
圖4 判斷模塊圖
?
?
?
(4) 自動計(jì)數(shù)模塊
功能描述:系統(tǒng)根據(jù)您猜數(shù)字的次數(shù),自動計(jì)數(shù).
? ? ?? ??? ??
| ??? 玩家猜數(shù)字,若猜錯 ??? ??? |
?? ??? ??
| ??? 計(jì)數(shù)器加1 ??? ??? |
?
?
?
?
圖5 自動計(jì)數(shù)模塊圖
?
(5) 結(jié)果輸出模塊
功能描述:直到用戶猜到數(shù)字為止,提示信息是否繼續(xù)猜數(shù)字,如果繼續(xù)將進(jìn)入下一次游戲,如果退出將退出游戲系統(tǒng).
?類的設(shè)計(jì):
表1類的分類
| 類名 | 屬性 |
| Math.random | 數(shù)學(xué)中的隨機(jī)數(shù)。 |
| BorderLayout | 圖形界面窗口的設(shè)計(jì)與調(diào)整 |
| Concurrent | concurrent 在并發(fā)編程中很常用的實(shí)用工具類。 |
?
從用戶的角度看,Java 源程序中的類分為兩種:
系統(tǒng)定義的類:即 Java 類庫,它是系統(tǒng)定義好的類。Java 語言由語法規(guī)則和類庫兩部分組成,語法規(guī)則確定 Java 程序的書寫規(guī)范;類庫則提供了 Java 程序與運(yùn)行它的系統(tǒng)軟件(Java 虛擬機(jī))之間的接口。
用戶自定義類:系統(tǒng)定義的類雖然實(shí)現(xiàn)了許多常見的功能,但是用戶程序仍然需要針對特定問題的特定邏輯來定義自己的類。
在 Java 程序中,用戶自定義類的一般格式如下:
class 類名
數(shù)據(jù)成員
成員方法
類的結(jié)構(gòu)是由類說明和類體兩部分組成的。
類的說明部分由關(guān)鍵字 class 與類名組成,類名的命名遵循 Java 標(biāo)識符的定義規(guī)則。
類體是類聲明中花括號所包括的全部內(nèi)容,它又是由數(shù)據(jù)成員(屬性)和成員方法(方法)兩部分組成。
數(shù)據(jù)成員描述對象的屬性;成員方法則刻畫對象的行為或動作,每一個成員方法確定一個功能或操作。
首先搭建Java程序框架。打開Eclipse,新建名為GuessNumberGame的項(xiàng)目,然后新建名為GuessNumber的Java類。GuessNumber加上合適的javadoc。
第一步:隨機(jī)數(shù)的產(chǎn)生
我們可以借助Java API提供的Random類來產(chǎn)生一個隨機(jī)數(shù)。
首先在main函數(shù)中加入以下三行代碼:
// 新建一個隨機(jī)數(shù)產(chǎn)生器,然后生成一個1到100之間的整數(shù)。
??? num=(int)(Math.random()*100);?????
String answer;??????
Scanner input=new Scanner(System.in);
第二步:標(biāo)準(zhǔn)輸入輸出
標(biāo)準(zhǔn)輸入輸出(Standard I/O)是指可以被應(yīng)用程序使用的信息流。應(yīng)用程序可以從標(biāo)準(zhǔn)輸入(Standard input)讀取數(shù)據(jù),向標(biāo)準(zhǔn)輸出(Standard output)寫數(shù)據(jù),把出錯信息發(fā)送到標(biāo)準(zhǔn)錯誤(Standard error)。通過輸入輸出,應(yīng)用程序和應(yīng)用程序之間可以被串聯(lián)起來使用。雖然標(biāo)準(zhǔn)輸入輸出是從UNIX發(fā)展出來的概念,在Windows中也廣泛應(yīng)用。
猜數(shù)字游戲主要用到標(biāo)準(zhǔn)輸入,更明確一些,就是控制臺輸入。相反,要從控制臺輸入,就需要用到System.in。它是一個純粹的輸入流,而猜數(shù)字游戲主要是通過控制臺獲取玩家的字符輸入,我們需要把它包裝成一個BufferedReader。
第三步:使用BorderLayout對圖形界面的窗口進(jìn)行設(shè)計(jì)。
三.程序?qū)崿F(xiàn)
1 程序流程圖
點(diǎn)擊“獲取隨機(jī)數(shù)”按鈕,系統(tǒng)獲取到一個隨機(jī)數(shù)。 玩家輸入一個數(shù),如果玩家輸入的數(shù)比系統(tǒng)給出的隨機(jī)數(shù)小,系統(tǒng)會提示“您猜的太小了,請繼續(xù)猜!”。如果玩家輸入的數(shù)比系統(tǒng)給出的隨機(jī)數(shù)大,系統(tǒng)提示“您猜的太大了,請繼續(xù)猜!”。 如果玩家猜對了數(shù),但是所用時間大于十秒,系統(tǒng)會提示“這么久才猜出來,有點(diǎn)笨!”,并且會計(jì)算出玩家所用的時間和所猜的次數(shù)。如果玩家猜對了數(shù),而且所用時間小于十秒,系統(tǒng)會提示“恭喜您,猜對了!您真棒,智商真高!”,并且會計(jì)算出玩家所用的時間和所猜的次數(shù)。
? ? ?? ??? ??
| ??? 系統(tǒng)產(chǎn)生一個隨機(jī)數(shù)X ??? ??? |
?? ??? ??
| ??? 玩家輸入一個在0~99范圍內(nèi)的數(shù)Y ??? ??? |
?? ??? ??
| ??? 若X>Y ??? ??? |
?
?
?
?
?
?
?
??? ? ?? ??? ??
| ??? 輸出“您猜的太小了,請繼續(xù)猜” ??? ??? |
?? ??? ??
| ??? 若X<Y ??? ??? |
?
??????????
? ? ?? ??? ??
| ??? 輸出“您猜的太大了,請繼續(xù)猜” ??? ??? |
?? ??? ??
| ??? 猜對 ??? ??? |
?? ??? ??
| ??? 這么久才猜出來,有點(diǎn)笨 ??? ??? |
?? ??? ??
| ??? 儲存記錄 ??? ??? |
?
?
?
?
?
? ?? ??? ??
| ??? 恭喜您,猜對了! ???您真棒! ??? ??? |
????
?
?
? ? ?? ??? ??
| ??? ?結(jié) 束 ??? ??? |
?
?
?
?
?
?
?
?
????????????????????????? ?圖6 程序流程圖
2 關(guān)鍵算法與技術(shù)實(shí)現(xiàn)
package 軟件個人作業(yè);
?
import java.util.InputMismatchException;
import java.util.Scanner;
?
public class R {
??????? public static void main(String[] args) {
??????????????? // 產(chǎn)生一個隨機(jī)數(shù)
??????????????? int number = (int) (Math.random() * 100) + 1;
?
??????????? ????// 加入count
??????????????? int count = 0;
?
??????????????? // 在這里加入最大值,和最小值
??????????????? int max = 100;
??????????????? int min = 1;
?
??????????????? while (true) {
??????????????????????? // 鍵盤錄入數(shù)據(jù)
??????????????????????? Scanner sc = new Scanner(System.in);
??????????????????????? System.out.println("請輸入你要猜的數(shù)據(jù):(" + min + "~" + max + ")");
??????????????????????? try {
??????????????????????????????? count++;
??????????????????????????????? int guessNumber = sc.nextInt();
?????????????????????????? ?????// 判斷
??????????????????????????????? if (guessNumber > number) {
??????????????????????????????????????? max = guessNumber;
??????????????????????????????????????? System.out.println("您輸入的太大");
??????????????????????????????? } else if (guessNumber < number) {
??????????????????????????????????????? min = guessNumber;
??????????????????????????????????????? System.out.println("您輸入的太小");
??????????????????????????????? } else {
??????????????????????????????????????? System.out.println("恭喜你,花了" + count + "次就猜中了");
??????????????????????????????????????? // 問是否繼續(xù)
??????????????????????????????????????? System.out.println("請問還要繼續(xù)嗎?(yes)");
??????????????????????????????????????? sc = new Scanner(System.in);
??????????????????????????????????????? String str = sc.nextLine();
??????????????????????????????????????? if ("yes".equals(str)) {
??????????????????????????????????????????????? // 重寫賦值隨機(jī)數(shù)
??????????????????????????????????????????????? number = (int) (Math.random() * 100) + 1;
???????????????????????? ???????????????????????count = 0;
??????????????????????????????????????????????? max = 100;
??????????????????????????????????????????????? min = 1;
??????????????????????????????????????? } else {
??????????????????????????????????????????????? break;
? ??????????????????????????????????????}
??????????????????????????????? }
??????????????????????? } catch (InputMismatchException e) {
??????????????????????????????? System.out.println("你輸入的不是數(shù)字");
??????????????????????? }
??????????????? }
??????? }
}
3 類的實(shí)現(xiàn)
首先搭建Java程序框架。打開Eclipse,新建名為GuessNumberGame的項(xiàng)目,然后新建名為GuessNumber的Java類。GuessNumber加上合適的javadoc。
第一步:隨機(jī)數(shù)的產(chǎn)生
我們可以借助Java API提供的Random類來產(chǎn)生一個隨機(jī)數(shù)。
首先在main函數(shù)中加入以下三行代碼:
// 新建一個隨機(jī)數(shù)產(chǎn)生器,然后生成一個1到100之間的整數(shù)。
??? num=(int)(Math.random()*100);??????
String answer;?????
Scanner input=new Scanner(System.in);
?Eclipse立即在錯誤語句處劃出紅線,把鼠標(biāo)移動到紅線上。
包(Package)的概念
Java API中包含了極其豐富、類似于Random這樣由Sun預(yù)先定義好的類。不同包中可以有同名同姓的類,如果沒有包的概念,就會遇到命名沖突問題。此外,包還能進(jìn)行安全控制。Random類是在java.util這個包中。可以手動在源程序頂部輸入import java.util.Random;語句來申明該程序?qū)⒁褂胘ava.util包中的Random類,然而有了Eclipse,就不用那么麻煩了—把光標(biāo)移動到有紅色波浪線的Random上,然后按下Ctrl+Shift+M,Eclipse會自動幫你完成導(dǎo)入的工作了,此時保存一下源代碼。
第二句語句定義一個整型變量number來保存隨機(jī)產(chǎn)生的整數(shù),并且用直接初始化的方法把random產(chǎn)生的隨機(jī)數(shù)賦給number變量。
第二步:標(biāo)準(zhǔn)輸入輸出
標(biāo)準(zhǔn)輸入輸出(Standard I/O)是指可以被應(yīng)用程序使用的信息流。應(yīng)用程序可以從標(biāo)準(zhǔn)輸入(Standard input)讀取數(shù)據(jù),向標(biāo)準(zhǔn)輸出(Standard output)寫數(shù)據(jù),把出錯信息發(fā)送到標(biāo)準(zhǔn)錯誤(Standard error)。通過輸入輸出,應(yīng)用程序和應(yīng)用程序之間可以被串聯(lián)起來使用。雖然標(biāo)準(zhǔn)輸入輸出是從UNIX發(fā)展出來的概念,在Windows中也廣泛應(yīng)用。
猜數(shù)字游戲主要用到標(biāo)準(zhǔn)輸入,更明確一些,就是控制臺輸入。相反,要從控制臺輸入,就需要用到System.in。它是一個純粹的輸入流,而猜數(shù)字游戲主要是通過控制臺獲取玩家的字符輸入,我們需要把它包裝成一個BufferedReader。
??? 第三步:使用BorderLayout對圖形界面的窗口進(jìn)行設(shè)計(jì)。
四.測試運(yùn)行
1 系統(tǒng)測試方案
1.點(diǎn)擊運(yùn)行程序后,顯示出圖形界面。
2.點(diǎn)擊“獲取隨機(jī)數(shù)”按鈕,系統(tǒng)獲取到一個隨機(jī)數(shù)。
3 .玩家輸入一個數(shù),點(diǎn)擊“確定”按鈕。如果玩家輸入的數(shù)比系統(tǒng)給出的隨機(jī)數(shù)小,系統(tǒng)會提示“您猜的太小了,請繼續(xù)猜!”。如果玩家輸入的數(shù)比系統(tǒng)給出的隨機(jī)數(shù)大,系統(tǒng)提示“您猜的太大了,請繼續(xù)猜!”。
4 .如果玩家猜對了數(shù),但是所用時間大于十秒,系統(tǒng)會提示“這么久才猜出來,有點(diǎn)笨!”,并且會計(jì)算出玩家所用的時間和所猜的次數(shù)。如果玩家猜對了數(shù),而且所用時間小于十秒,系統(tǒng)會提示“恭喜您,猜對了!您真棒,智商真高!”,并且會計(jì)算出玩家所用的時間和所猜的次數(shù)。
5. 如果玩家想重新再玩一次,點(diǎn)擊“獲取隨機(jī)數(shù)”按鈕即可繼續(xù)玩下一輪游戲。
?
2 運(yùn)行結(jié)果分析
開始運(yùn)行程序時圖形界面的顯示
?
?
?
?
五.心得與問題
這是第一次結(jié)對編程,覺得很新奇,同時也有些問題,比方說分工,交流方面,因?yàn)槠綍r時間較少,交流的還是不夠多,經(jīng)過幾天的時間,終于弄完了,但是框架圖沒出來,看起來不方便,也請?jiān)u論者諒解,以后會改進(jìn)的。通過這次實(shí)踐,把理論用到了實(shí)驗(yàn)中,使我更加認(rèn)識了java的功能,只希望以后,老師能更加了解我們,跟我們一同進(jìn)步。
?
轉(zhuǎn)載于:https://www.cnblogs.com/pickles/p/4510666.html
總結(jié)
- 上一篇: Android二维码之创建
- 下一篇: 百度推送老是不成功,没有提醒查找原因