国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

猜字母游戲

2019-11-14 21:10:24
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
猜字母游戲猜字母游戲
  1. 猜字母游戲——設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)
  2. 猜字母游戲——設(shè)計(jì)程序結(jié)構(gòu)
  3. 猜字母游戲——實(shí)現(xiàn)字母生成方法
  4. 猜字母游戲——實(shí)現(xiàn)字母檢測(cè)方法
  5. 猜字母游戲——實(shí)現(xiàn)主方法

1 猜字母游戲——設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)1.1 問(wèn)題

有猜字母游戲,其游戲規(guī)則為:程序隨機(jī)產(chǎn)生5個(gè)按照一定順序排列的字符作為猜測(cè)的結(jié)果,由玩家來(lái)猜測(cè)此字符串。玩家可以猜測(cè)多次,每猜測(cè)一次,則由系統(tǒng)提示結(jié)果。如果猜測(cè)的完全正確,則游戲結(jié)束,計(jì)算玩家的游戲得分并輸出;如果沒(méi)有猜對(duì),則提示猜測(cè)的結(jié)果,如猜對(duì)了幾個(gè)字符,以及猜對(duì)了幾個(gè)字符的位置等信息,并提示玩家游戲繼續(xù)。

本案例要求使用交互的方式實(shí)現(xiàn)此游戲:由玩家在控制臺(tái)輸入所猜測(cè)的字符串,如果所猜測(cè)的字符串與結(jié)果并不完全相同,則在界面輸出比較后的結(jié)果,并提醒玩家繼續(xù)猜測(cè)。交互過(guò)程如圖-7所示:

圖- 7

由圖-7可以看出,每次猜測(cè)后,程序?qū)⒈容^玩家所輸入的字符串,比較字符以及字符的位置,然后提示結(jié)果:5個(gè)字符中正確的字符個(gè)數(shù),以及位置正確的字符個(gè)數(shù),以便于玩家判斷后續(xù)如何進(jìn)行猜測(cè)。

玩家終于猜測(cè)正確后,游戲結(jié)束,并給出游戲得分,交互過(guò)程如圖-8所示:

圖- 8

其中,游戲的得分規(guī)則為:字符的個(gè)數(shù)乘以100為總分,即此游戲的總分為 500 分。玩家如果第一次就猜對(duì),則得滿分(500分);每多猜測(cè)一次,則扣10分。由圖-8可以看出,玩家共猜測(cè)了5次,因此,得分為 450。

最后,如果玩家在控制臺(tái)錄入 exit,則游戲中止,程序結(jié)束。交互過(guò)程如圖-9所示:

圖- 9

本案例需要實(shí)現(xiàn)猜字母游戲中的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì),即,設(shè)計(jì)相關(guān)的數(shù)據(jù)結(jié)構(gòu),可以存儲(chǔ)此程序中所用到的相關(guān)數(shù)據(jù)。

1.2 方案

分析猜字母游戲可以看出,此程序需要存儲(chǔ)隨機(jī)生成的字母?jìng)€(gè)數(shù)、隨機(jī)生成的字符串、玩家猜測(cè)的總次數(shù)、玩家錄入的字符串,以及比較后的結(jié)果。因此,設(shè)計(jì)如下變量來(lái)存儲(chǔ)此游戲中需要用到的相關(guān)數(shù)據(jù):

  • int 類(lèi)型變量 count:用于記錄玩家猜字母的總次數(shù);
  • char數(shù)組類(lèi)型變量 input:用于保存用戶猜測(cè)的數(shù)據(jù)。
  • char數(shù)組類(lèi)型變量 chs: 用于保存隨機(jī)生成的多個(gè)字母所組成的字符串;
  • int 類(lèi)型數(shù)組變量 result :用于保存判斷的結(jié)果。此數(shù)組有兩個(gè)元素,第一個(gè)用于保存完全猜對(duì)的字母?jìng)€(gè)數(shù)(字符正確且位置也正確),第二個(gè)元素用于保存猜對(duì)的字母?jìng)€(gè)數(shù)(字符正確但位置不正確)。
1.3 步驟

實(shí)現(xiàn)此案例需要按照如下步驟進(jìn)行。

步驟一:定義類(lèi)及 main方法

首先定義一個(gè)名為 GuessingGame 的類(lèi),并在類(lèi)中添加java應(yīng)用程序的主方法main,代碼如下所示:

public class GuessingGame {    public static void main(String[] args) {            }}

步驟二:存儲(chǔ)猜測(cè)的次數(shù)

定義一個(gè)int類(lèi)型變量 count,用于記錄玩家猜字母的總次數(shù),代碼如下所示:

public class GuessingGame {    public static void main(String[] args) {        int count = 0;    }}

步驟三:存儲(chǔ)用戶猜測(cè)的數(shù)據(jù)

char數(shù)組類(lèi)型變量 input:用于保存用戶猜測(cè)的數(shù)據(jù),代碼如下所示:

public class GuessingGame {    public static void main(String[] args) {        int count = 0;char[] input=null;    }}

步驟四:存儲(chǔ)隨機(jī)生成的多個(gè)字母

定義一個(gè)char數(shù)組類(lèi)型 chs, 用于保存隨機(jī)生成的字母。代碼如下所示:

public class GuessingGame {    public static void main(String[] args) {        int count = 0;char[] input=null;        char[] chs =null;    }}

步驟五:存儲(chǔ)比較結(jié)果

定義一個(gè)int數(shù)組類(lèi)型變量 result,用于存儲(chǔ)比較的結(jié)果。該數(shù)組有兩個(gè)元素,第一個(gè)用于保存完全猜對(duì)的字母?jìng)€(gè)數(shù)(字符和位置均正確),第二個(gè)元素用于保存猜對(duì)的字母?jìng)€(gè)數(shù)(字符正確,但是位置不正確)。代碼如下所示:

public class GuessingGame {    public static void main(String[] args) {        int count = 0;char[] input=null;        char[] chs =null;        int[] result =new int[2];    }}

1.4 完整代碼

本案例的完整代碼如下所示:

public class GuessingGame {    public static void main(String[] args) {        // 表示玩家猜測(cè)的次數(shù)        int count = 0;//表示用戶猜測(cè)的數(shù)據(jù)char[] input=null;        // 表示猜測(cè)的字符串        char[] chs =null;        // 用于保存判斷的結(jié)果        int[] result = new int[2];    }}
View Code

2 猜字母游戲——設(shè)計(jì)程序結(jié)構(gòu)2.1 問(wèn)題

本案例需要實(shí)現(xiàn)猜字母游戲程序中的程序結(jié)構(gòu)設(shè)計(jì)。

2.2 方案

分析猜字母游戲可以看出,程序首先需要隨機(jī)產(chǎn)生 5 個(gè)不同的字母作為需要猜測(cè)的結(jié)果,因此,可以先定義一個(gè)方法,以實(shí)現(xiàn)此功能;其次,每當(dāng)玩家猜測(cè)一次后,程序需要將玩家錄入的字符串和正確答案進(jìn)行比較,統(tǒng)計(jì)正確的字符個(gè)數(shù)以及正確的位置個(gè)數(shù),因此,也可以先定義一個(gè)方法,專(zhuān)用于實(shí)現(xiàn)比較功能。這樣,就可以在 main 方法中調(diào)用這兩個(gè)方法。

2.3 步驟

實(shí)現(xiàn)此案例需要按照如下步驟進(jìn)行。

步驟一:定義方法 generate()

在 GuessingGame 類(lèi)中,定義方法 generate(),該方法用于隨機(jī)生成五個(gè)不同的字母。代碼如下所示:

import java.util.Scanner;public class GuessingGame {    public static void main(String[] args) {        // 表示玩家猜測(cè)的次數(shù)        int count = 0;//表示用戶猜測(cè)的數(shù)據(jù)char[] input=null;        // 表示猜測(cè)的字符串        char[] chs =null;        // 用于保存判斷的結(jié)果        int[] result = new int[2];            }    /**     * 隨機(jī)生成需要猜測(cè)的字母序列     *     * @return 存儲(chǔ)隨機(jī)字符的數(shù)組     */    public static char[] generate() {        char[] chs = new char[5];                return chs;    }}

步驟二:定義方法 check()

在GuessingGame類(lèi)中,定義方法 check()。該方法用于將玩家輸入的多個(gè)字母(參數(shù) input )和系統(tǒng)隨機(jī)生成的多個(gè)字母(參數(shù) chs)進(jìn)行比較,統(tǒng)計(jì)正確的字符個(gè)數(shù),以及位置正確的個(gè)數(shù),并將結(jié)果存儲(chǔ)到數(shù)組中,然后返回給調(diào)用方。代碼如下所示:

import java.util.Scanner;public class GuessingGame {    public static void main(String[] args) {        // 表示玩家猜測(cè)的次數(shù)        int count = 0;//表示用戶猜測(cè)的數(shù)據(jù)char[] input=null;        // 表示猜測(cè)的字符串        char[] chs =null;        // 用于保存判斷的結(jié)果        int[] result = new int[2];                }    /**     * 隨機(jī)生成需要猜測(cè)的字母序列     *     * @return 存儲(chǔ)隨機(jī)字符的數(shù)組     */    public static char[] generate() {        char[] chs = new char[5];                return chs;    }    /**     * 比較玩家輸入的字母序列和程序所生成的字母序列,逐一比較字符及其位置,并記載比較結(jié)果     *     * @param chs     * 程序生成的字符序列     * @param input     * 玩家輸入的字符序列     * @return 存儲(chǔ)比較的結(jié)果。返回值int數(shù)組 的長(zhǎng)度為2,其中,索引為0的位置     * 用于存放完全猜對(duì)的字母?jìng)€(gè)數(shù)(字符和位置均正確),索引為1的位置用于存放猜對(duì)的字母?jìng)€(gè)數(shù)(字符正確,但是位置不正確)。     */    public static int[] check(char[] chs, char[] input) {        int[] result = new int[2];                return result;    }}

2.4 完整代碼

本案例的完整代碼如下所示:

import java.util.Scanner;public class GuessingGame {    public static void main(String[] args) {     // 表示玩家猜測(cè)的次數(shù)        int count = 0;//表示用戶猜測(cè)的數(shù)據(jù)char[] input=null;        // 表示猜測(cè)的字符串        char[] chs =null;        // 用于保存判斷的結(jié)果        int[] result = new int[2];        }    /**     * 隨機(jī)生成需要猜測(cè)的字母序列     *     * @return 存儲(chǔ)隨機(jī)字符的數(shù)組     */    public static char[] generate() {        char[] chs = new char[5];                return chs;    }    /**     * 比較玩家輸入的字母序列和程序所生成的字母序列,逐一比較字符及其位置,并記載比較結(jié)果     *     * @param chs     * 程序生成的字符序列     * @param input     * 玩家輸入的字符序列     * @return 存儲(chǔ)比較的結(jié)果。返回值int數(shù)組 的長(zhǎng)度為2,其中,索引為0的位置     * 用于存放完全猜對(duì)的字母?jìng)€(gè)數(shù)(字符和位置均正確),索引為1的位置用于存放猜對(duì)的字母?jìng)€(gè)數(shù)(字符正確,但是位置不正確)。     */    public static int[] check(char[] chs, char[] input) {        int[] result = new int[2];                return result;    }}
View Code

3 猜字母游戲——實(shí)現(xiàn)字母生成方法3.1 問(wèn)題

實(shí)現(xiàn)猜字母游戲中的字母生成方法,即,隨機(jī)生成 5 個(gè)不同的字母作為猜測(cè)的結(jié)果。

3.2 方案

實(shí)現(xiàn)gererate方法,首先聲明一個(gè)字符類(lèi)型的數(shù)組,用于存儲(chǔ) 26 個(gè)大寫(xiě)字母,然后聲明一個(gè) boolean 類(lèi)型的數(shù)組,其長(zhǎng)度也為 26。此數(shù)組中的初始值均為false,意味著,程序起始,沒(méi)有任何字母被選中。如果某個(gè)字母被選中,則同時(shí)設(shè)置該字母在 boolean 類(lèi)型數(shù)組中對(duì)應(yīng)位置上的值為true,表示該字母被選中過(guò)。

然后,使用嵌套循環(huán):外層循環(huán)用于控制所生成的字母?jìng)€(gè)數(shù),即,循環(huán) 5 次,以產(chǎn)生5 個(gè)字母;而內(nèi)層循環(huán)則用于判斷所生成的字母是否重復(fù)。generate方法的程序流程如圖-10所示。

圖- 10

3.3 步驟

實(shí)現(xiàn)此案例需要按照如下步驟進(jìn)行。

步驟一:構(gòu)建存儲(chǔ)所有字母的數(shù)組

在generate方法中,首先定義 char 類(lèi)型的數(shù)組變量 letters,用于存放26 個(gè)大寫(xiě)字母,然后定義 boolean 類(lèi)型的數(shù)組變量 flag,flag數(shù)組的大小和letters數(shù)組的大小相同,用于記載某字母是否被選中,以便于判斷字母是否重復(fù)。代碼如下所示:

    public static char[] generate() {        char[] chs = new char[5];        char[] letters = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',                'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',                'W', 'X', 'Y', 'Z' };        boolean[] flags = new boolean[letters.length];                return chs;    }

步驟二:隨機(jī)選擇 5 個(gè)不同的字母

使用嵌套循環(huán),隨機(jī)選擇 5 個(gè)不同的字母,并且這五個(gè)字母各不相同。代碼如下所示:

    public static char[] generate() {        char[] chs = new char[5] ;        char[] letters = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',                'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',                'W', 'X', 'Y', 'Z' };        boolean[] flags = new boolean[letters.length];        for (int i = 0; i < chs.length; i++) {            int index;            do {                index = (int) (Math.random() * (letters.length));            } while (flags[index]);// 判斷生成的字符是否重復(fù)            chs[i] = letters[index];            flags[index] = true;        }        return chs;    }

3.4 完整代碼

本案例的完整代碼如下所示:

import java.util.Scanner;public class GuessingGame {    public static void main(String[] args) {        // 表示玩家猜測(cè)的次數(shù)        int count = 0;//表示用戶猜測(cè)的數(shù)據(jù)char[] input=null;        // 表示猜測(cè)的字符串        char[] chs =null;        // 用于保存判斷的結(jié)果        int[] result = new int[2];        }    /**     * 隨機(jī)生成需要猜測(cè)的字母序列     *     * @return 存儲(chǔ)隨機(jī)字符的數(shù)組     */    public static char[] generate() {char[] chs = new char[5];        char[] letters = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',                'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',                'W', 'X', 'Y', 'Z' };        boolean[] flags = new boolean[letters.length];                for (int i = 0; i < chs.length; i++) {            int index;            do {                index = (int) (Math.random() * (letters.length));            } while (flags[index]);// 判斷生成的字符是否重復(fù)            chs[i] = letters[index];            flags[index] = true;        }        return chs;    }    /**     * 比較玩家輸入的字母序列和程序所生成的字母序列,逐一比較字符及其位置,并記載比較結(jié)果     *     * @param chs     * 程序生成的字符序列     * @param input     * 玩家輸入的字符序列     * @return 存儲(chǔ)比較的結(jié)果。返回值int數(shù)組 的長(zhǎng)度為2,其中,索引為0的位置     * 用于存放完全猜對(duì)的字母?jìng)€(gè)數(shù)(字符和位置均正確),索引為1的位置用于存放猜對(duì)的字母?jìng)€(gè)數(shù)(字符正確,但是位置不正確)。     */    public static int[] check(char[] chs, char[] input) {        int[] result = new int[2];                return result;    }}
View Code

4 猜字母游戲——實(shí)現(xiàn)字母檢測(cè)方法4.1 問(wèn)題

比較玩家輸入的字母序列和程序所生成的字母序列,逐一比較字符及其位置,并記載比較結(jié)果。

4.2 方案

實(shí)現(xiàn)check方法,需要逐一取出玩家錄入的每個(gè)字符,并和結(jié)果字符串一一比較:比較字符本身以及字符所在的位置,并記載比較的結(jié)果。此案例需要使用嵌套循環(huán)來(lái)實(shí)現(xiàn)。check方法的流程如圖-11所示,其中紅色部分表示外層循環(huán),藍(lán)色部分表示內(nèi)層循環(huán)。

圖- 11

4.3 步驟

實(shí)現(xiàn)此案例需要按照如下步驟進(jìn)行。

步驟一:構(gòu)建存儲(chǔ)比較結(jié)果的數(shù)組

在check() 方法中,首先定義int 類(lèi)型的數(shù)組類(lèi)型變量result,用于存儲(chǔ)比較的結(jié)果。數(shù)組 result 的長(zhǎng)度為2,其中,resut[0] 用于存放完全猜對(duì)的字母?jìng)€(gè)數(shù)(字符和位置均正確),result[1] 用于存放猜對(duì)的字母?jìng)€(gè)數(shù)(字符正確,但是位置不正確)。代碼如下所示:

    public static int[] check(char[] chs, char[] input) {        int[] result = new int[2];            return result;    }

步驟二:比較

使用嵌套循環(huán),統(tǒng)計(jì)完全猜對(duì)的字母?jìng)€(gè)數(shù),和猜對(duì)的字母?jìng)€(gè)數(shù)(位置不對(duì)),代碼如下所示:

    public static int[] check(char[] chs, char[] input) {        int[] result = new int[2];        for (int i = 0; i < input.length; i++) {            for (int j = 0; j < chs.length; j++) {                if (input[i] == chs[j]) {                    result[1]++;                    if (i == j) {                        result[0]++;                    }                    break;                }            }        }        return result;    }

4.4 完整代碼

本案例的完整代碼如下所示:

import java.util.Scanner;public class GuessingGame {    public static void main(String[] args) {        // 表示玩家猜測(cè)的次數(shù)        int count = 0;//表示用戶猜測(cè)的數(shù)據(jù)char[] input=null;        // 表示猜測(cè)的字符串        char[] chs =null;        // 用于保存判斷的結(jié)果        int[] result = new int[2];        }    /**     * 隨機(jī)生成需要猜測(cè)的字母序列     *     * @return 存儲(chǔ)隨機(jī)字符的數(shù)組     */    public static char[] generate() {char[] chs = new char[5];        char[] letters = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',                'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',                'W', 'X', 'Y', 'Z' };        boolean[] flags = new boolean[letters.length];                for (int i = 0; i < chs.length; i++) {            int index;            do {                index = (int) (Math.random() * (letters.length));            } while (flags[index]);// 判斷生成的字符是否重復(fù)            chs[i] = letters[index];            flags[index] = true;        }        return chs;    }    /**     * 比較玩家輸入的字母序列和程序所生成的字母序列,逐一比較字符及其位置,并記載比較結(jié)果     *     * @param chs     * 程序生成的字符序列     * @param input     * 玩家輸入的字符序列     * @return 存儲(chǔ)比較的結(jié)果。返回值int數(shù)組 的長(zhǎng)度為2,其中,索引為0的位置     * 用于存放完全猜對(duì)的字母?jìng)€(gè)數(shù)(字符和位置均正確),索引為1的位置用于存放猜對(duì)的字母?jìng)€(gè)數(shù)(字符正確,但是位置不正確)。     */    public static int[] check(char[] chs, char[] input) {        int[] result = new int[2];        for (int i = 0; i < input.length; i++) {            for (int j = 0; j < chs.length; j++) {                if (input[i] == chs[j]) {// 判斷字符是否正確                    result[1]++;                    if (i == j) {// 判斷位置是否正確                        result[0]++;                    }                    break;                }            }        }        return result;    }}
View Code

5 猜字母游戲——實(shí)現(xiàn)主方法5.1 問(wèn)題

實(shí)現(xiàn)猜字母游戲的整體流程。

5.2 方案

為實(shí)現(xiàn)猜字母游戲的整體過(guò)程,首先需要調(diào)用generate() 方法,以生成五個(gè)字母;

其次,需要使用 while(true) 循環(huán)允許玩家進(jìn)行多次猜測(cè);

在循環(huán)中,接收玩家猜測(cè)的字母,然后調(diào)用check() 方法,檢查猜測(cè)的結(jié)果。如果猜測(cè)正確,則輸出提示信息和分?jǐn)?shù),游戲結(jié)束;如果猜測(cè)錯(cuò)誤,則輸出猜測(cè)的判斷結(jié)果并提示玩家游戲繼續(xù)。main程序流程如圖-12所示。

圖- 12

5.3 步驟

實(shí)現(xiàn)此案例需要按照如下步驟進(jìn)行。

步驟一:構(gòu)建存儲(chǔ)所有字母的數(shù)組

在main方法中,先輸出提示信息表示游戲開(kāi)始,然后調(diào)用generate() 方法生成要猜測(cè)的五個(gè)字母,并提示玩家開(kāi)始猜測(cè),代碼如下所示:

import java.util.Scanner;public class GuessingGame {    public static void main(String[] args) {        // 表示玩家猜測(cè)的次數(shù)        int count = 0;//表示用戶猜測(cè)的數(shù)據(jù)char[] input=null;        // 用于保存判斷的結(jié)果        int[] result = new int[2];        Scanner scanner = new Scanner(System.in);        System.out.

步驟二:構(gòu)建循環(huán)

使用while(true)循環(huán),并在循環(huán)中調(diào)用Scanner類(lèi)的next() 方法接收玩家猜測(cè)的字符串。為方便字符串的比較,將玩家錄入的字符串均轉(zhuǎn)換為大寫(xiě)字母,然后先判斷玩家錄入的是否為“EXIT”,如果是,則循環(huán)中止,游戲結(jié)束。代碼如下所示:

import java.util.Scanner;public class GuessingGame {    public static void main(String[] args) {        // 表示玩家猜測(cè)的次數(shù)        int count = 0;//表示用戶猜測(cè)的數(shù)據(jù)char[] input=null;        // 用于保存判斷的結(jié)果        int[] result = new int[2];        Scanner scanner = new Scanner(System.in);        System.out.println("GuessingGame>歡迎嘗試猜字母游戲!");        // 表示猜測(cè)的字符串        char[] chs = generate();        System.out.println("GuessingGame>游戲開(kāi)始,請(qǐng)輸入你所猜的5個(gè)字母序列:(exit——退出)");        while (true) {            String inputStr = scanner.next().trim().toUpperCase();            if ("EXIT".equals(inputStr)) {                System.out.println("GuessingGame>謝謝你的嘗試,再見(jiàn)!");                break;            }        }        scanner.close();    }    /**     * 隨機(jī)生成需要猜測(cè)的字母序列     *     * @return 存儲(chǔ)隨機(jī)字符的數(shù)組     */    public static char[] generate() {                char[] letters = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',                'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',                'W', 'X', 'Y', 'Z' };        boolean[] flags = new boolean[letters.length];        char[] chs = new char[5];        for (int i = 0; i < chs.length; i++) {            int index;            do {                index = (int) (Math.random() * (letters.length));            } while (flags[index]);// 判斷生成的字符是否重復(fù)            chs[i] = letters[index];            flags[index] = true;        }        return chs;    }    /**     * 比較玩家輸入的字母序列和程序所生成的字母序列,逐一比較字符及其位置,并記載比較結(jié)果     *     * @param chs     * 程序生成的字符序列     * @param input     * 玩家輸入的字符序列     * @return 存儲(chǔ)比較的結(jié)果。返回值int數(shù)組 的長(zhǎng)度為2,其中,索引為0的位置     * 用于存放完全猜對(duì)的字母?jìng)€(gè)數(shù)(字符和位置均正確),索引為1的位置用于存放猜對(duì)的字母?jìng)€(gè)數(shù)(字符正確,但是位置不正確)。     */    public static int[] check(char[] chs, char[] input) {        int[] result = new int[2];        for (int i = 0; i < input.length; i++) {            for (int j = 0; j < chs.length; j++) {                if (input[i] == chs[j]) {// 判斷字符是否正確                    result[1]++;                    if (i == j) {// 判斷位置是否正確                        result[0]++;                    }                    break;                }            }        }        return result;    }}

步驟三:比較

如果玩家錄入的不是“EXIT”,則調(diào)用check() 方法與答案進(jìn)行比較,并得到存儲(chǔ)比較結(jié)果的數(shù)組 result 。

比較完畢后,根據(jù)比較結(jié)果輸出提示信息到界面,并計(jì)算分?jǐn)?shù)。如果5個(gè)字符的位置均正確,則表示游戲結(jié)束,計(jì)算并輸出玩家的得分;否則,將猜測(cè)的次數(shù)累加1 ,并提示玩家所猜對(duì)的字符個(gè)數(shù)以及位置個(gè)數(shù),游戲繼續(xù)。代碼如下所示:

import java.util.Scanner;public class GuessingGame {    public static void main(String[] args) {        // 表示玩家猜測(cè)的次數(shù)        int count = 0;//表示用戶猜測(cè)的數(shù)據(jù)char[] input=null;        // 用于保存判斷的結(jié)果        int[] result = new int[2];        Scanner scanner = new Scanner(System.in);        System.out.println("GuessingGame>歡迎嘗試猜字母游戲!");        // 表示猜測(cè)的字符串        char[] chs = generate();        System.out.println("GuessingGame>游戲開(kāi)始,請(qǐng)輸入你所猜的5個(gè)字母序列:(exit——退出)");        while (true) {            String inputStr = scanner.next().trim().toUpperCase();            if ("EXIT".equals(inputStr)) {                System.out.println("GuessingGame>謝謝你的嘗試,再見(jiàn)!");                break;            }input = inputStr.toCharArray();            result = check(chs, input);            if (result[0] == chs.length) {// 完全猜對(duì)的情況                int score = 100 * chs.length - count * 10;                System.out.println("GuessingGame>恭喜你猜對(duì)了!你的得分是:" + score);                break;            } else {                count++;                System.out.println("GuessingGame>你猜對(duì)" + result[1] + "個(gè)字符,其中"                        + result[0] + "個(gè)字符的位置正確!(總次數(shù)=" + count + ",exit——退出)");        }        scanner.close();    }    /**     * 隨機(jī)生成需要猜測(cè)的字母序列     *     * @return 存儲(chǔ)隨機(jī)字符的數(shù)組     */    public static char[] generate() {                char[] letters = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',                'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',                'W', 'X', 'Y', 'Z' };        boolean[] flags = new boolean[letters.length];        char[] chs = new char[5];        for (int i = 0; i < chs.length; i++) {            int index;            do {                index = (int) (Math.random() * (letters.length));            } while (flags[index]);// 判斷生成的字符是否重復(fù)            chs[i] = letters[index];            flags[index] = true;        }        return chs;    }    /**     * 比較玩家輸入的字母序列和程序所生成的字母序列,逐一比較字符及其位置,并記載比較結(jié)果     *     * @param chs     * 程序生成的字符序列     * @param input     * 玩家輸入的字符序列     * @return 存儲(chǔ)比較的結(jié)果。返回值int數(shù)組 的長(zhǎng)度為2,其中,索引為0的位置     * 用于存放完全猜對(duì)的字母?jìng)€(gè)數(shù)(字符和位置均正確),索引為1的位置用于存放猜對(duì)的字母?jìng)€(gè)數(shù)(字符正確,但是位置不正確)。     */    public static int[] check(char[] chs, char[] input) {        int[] result = new int[2];        for (int i = 0; i < input.length; i++) {            for (int j = 0; j < chs.length; j++) {                if (input[i] == chs[j]) {// 判斷字符是否正確                    result[1]++;                    if (i == j) {// 判斷位置是否正確                        result[0]++;                    }                    break;                }            }        }        return result;    }}

5.4 完整代碼

本案例的完整代碼如下所示:

import java.util.Scanner;public class GuessingGame {    public static void main(String[] args) {        // 表示玩家猜測(cè)的次數(shù)        int count = 0;//表示用戶猜測(cè)的數(shù)據(jù)char[] input=null;        // 用于保存判斷的結(jié)果        int[] result = new int[2];        Scanner scanner = new Scanner(System.in);        System.out.println("GuessingGame>歡迎嘗試猜字母游戲!");        // 表示猜測(cè)的字符串        char[] chs = generate();        System.out.println("GuessingGame>游戲開(kāi)始,請(qǐng)輸入你所猜的5個(gè)字母序列:(exit——退出)");        while (true) {            String inputStr = scanner.next().trim().toUpperCase();            if ("EXIT".equals(inputStr)) {                System.out.println("GuessingGame>謝謝你的嘗試,再見(jiàn)!");                break;            }            input = inputStr.toCharArray();            result = check(chs, input);            if (result[0] == chs.length) {// 完全猜對(duì)的情況                int score = 100 * chs.length - count * 10;                System.out.println("GuessingGame>恭喜你猜對(duì)了!你的得分是:" +score);                break;            } else {                count++;                System.out.println("GuessingGame>你猜對(duì)" + result[1] + "個(gè)字符,其中"                        + result[0] + "個(gè)字符的位置正確!(總次數(shù)=" + count + ",exit——退出)");            }        }        scanner.close();    }    /**     * 隨機(jī)生成需要猜測(cè)的字母序列     *     * @return 存儲(chǔ)隨機(jī)字符的數(shù)組     */    public static char[] generate() {                char[] letters = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',                'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',                'W', 'X', 'Y', 'Z' };        boolean[] flags = new boolean[letters.length];        char[] chs = new char[5];        for (int i = 0; i < chs.length; i++) {            int index;            do {                index = (int) (Math.random() * (letters.length));            } while (flags[index]);// 判斷生成的字符是否重復(fù)            chs[i] = letters[index];            flags[index] = true;        }        return chs;    }    /**     * 比較玩家輸入的字母序列和程序所生成的字母序列,逐一比較字符及其位置,并記載比較結(jié)果     *     * @param chs     * 程序生成的字符序列     * @param input     * 玩家輸入的字符序列     * @return 存儲(chǔ)比較的結(jié)果。返回值int數(shù)組 的長(zhǎng)度為2,其中,索引為0的位置     * 用于存放完全猜對(duì)的字母?jìng)€(gè)數(shù)(字符和位置均正確),索引為1的位置用于存放猜對(duì)的字母?jìng)€(gè)數(shù)(字符正確,但是位置不正確)。     */    public static int[] check(char[] chs, char[] input) {        int[] result = new int[2];        for (int i = 0; i < input.length; i++) {            for (int j = 0; j < chs.length; j++) {                if (input[i] == chs[j]) {// 判斷字符是否正確                    result[1]++;                    if (i == j) {// 判斷位置是否正確                        result[0]++;                    }                    break;                }            }        }        return result;    }}
View Code


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 南丹县| 廊坊市| 延长县| 临洮县| 分宜县| 财经| 务川| 隆回县| 乾安县| 盐源县| 房产| 东乌珠穆沁旗| 锡林郭勒盟| 沙湾县| 平定县| 友谊县| 连云港市| 新化县| 仪陇县| 县级市| 容城县| 西吉县| 石河子市| 合山市| 清河县| 六枝特区| 桂阳县| 社旗县| 松原市| 四川省| 依安县| 成都市| 永寿县| 耿马| 高邮市| 聊城市| 枞阳县| 海城市| 永昌县| 十堰市| 竹北市|