隨機生成數組游戲


1 隨機生成數組

封裝一個方法generateArray,該方法實現生成指定長度的int數組,該數組的元素為0到指定范圍內的隨機數,並將該數組返回。

參考答案

首先,分析generateArray方法要實現的功能,該方法要求生成指定長度的數組,那么,指定長度要作為方法的參數,用戶調用該方法時,傳入指定的長度即可。另外,該方法還要求數組中的元素為指定范圍的,那么,指定范圍也要作為方法的參數,這樣用戶調用該方法時,傳入這個范圍的值即可。

其次,該方法,要求返回生成后的數組,根據要求我們就可以確定該方法的返回值類型為int[]數組類型。

最后,在實現generateArray方法。在實現該方法的過程中,注意將參數使用到方法中正確位置。

實現此案例需要按照如下步驟進行。

步驟一:定義generateArray方法

首先,定義一個名為ArrayUtil的類,在該類中添加generateArray方法,代碼如下所示:

 
  1. public class ArrayUtil {
  2.     /**
  3.      * 該方法實現生成指定長度的int數組,該數組的元素為指定范圍內的隨機數,並返回該數組
  4.      *
  5.      * @param length
  6.      * 指定數組的長度
  7.      * @param max
  8.      * 指定范圍的值
  9.      * @return 生成的數組
  10.      */
  11.     public static int[] generateArray(int length, int max) {
  12.         
  13.     }
  14. }

查看上面代碼中定義的generateArray方法,其中,參數length表示要生成的數組的長度,參數max表示隨機生成數組元素的最大范圍。另外,int[]表示數組的返回值類型。

步驟二:設置返回值

在generateArray方法中,定義長度為length的數組。代碼如下:

 
  1. public class ArrayUtil {
  2.     /**
  3.      * 該方法實現生成指定元素數目的數組,該數組的元素為指定范圍內的隨機數,並返回該數組
  4.      *
  5.      * @param length
  6.      * 指定數組的長度
  7.      * @param max
  8.      * 指定范圍的最大值
  9.      * @return 生成的數組
  10.      */
  11.     public static int[] generateArray(int length, int max) {
  12.         // 創建長度為length的數組
  13.         int[] arr = new int[length];
  14.         // 返回生成的數組
  15.         return arr;
  16.     }
  17. }

在編寫代碼時,定義完成數組后,可以直接寫出return語句,返回數組arr,這樣就除去了開發工具提示的編譯錯誤。

步驟三:數組的賦值

使用 for 語句構建一個 length次的循環,在每次循環中,隨機產生一個 0到max之間的整數,並存入數組。

此案例中,使用 Random 類的 nextInt方法產生隨機數。代碼如下所示:

 
  1. import java.util.Random;
  2. public class ArrayUtil {
  3.     /**
  4.      * 該方法實現生成指定元素數目的數組,該數組的元素為指定范圍內的隨機數,並返回該數組
  5.      *
  6.      * @param length
  7.      * 指定數組的長度
  8.      * @param max
  9.      * 指定范圍的最大值
  10.      * @return 生成的數組
  11.      */
  12.     public static int[] generateArray(int length, int max) {
  13.         // 創建長度為length的數組
  14.         int[] arr = new int[length];
  15.         // 循環生成length個數值,並賦值給數組的元素
  16.         Random ran = new Random();
  17.         for (int i = 0; i < length; i++) {
  18.             arr[i] = ran.nextInt(max);
  19.         }
  20.         // 返回生成的數組
  21.         return arr;
  22.     }
  23. }

注意:此步驟中,需要導入java.util包下的Random類。

步驟四:調用方法

在main方法中,調用generateArray方法,接收方法的返回的數組,並輸出該數組。代碼如下所示:

 
  1. import java.util.Arrays;
  2. import java.util.Random;
  3. public class ArrayUtil {
  4.     /**
  5.      * 該方法實現生成指定元素數目的數組,該數組的元素為指定范圍內的隨機數,並返回該數組
  6.      *
  7.      * @param length
  8.      * 指定數組的長度
  9.      * @param max
  10.      * 指定范圍的最大值
  11.      * @return 生成的數組
  12.      */
  13.     public static int[] generateArray(int length, int max) {
  14.         // 創建長度為length的數組
  15.         int[] arr = new int[length];
  16.         // 循環生成length個數值,並賦值給數組的元素
  17.         Random ran = new Random();
  18.         for (int i = 0; i < length; i++) {
  19.             arr[i] = ran.nextInt(max);
  20.         }
  21.         // 返回生成的數組
  22.         return arr;
  23.     }
  24.     public static void main(String[] args) {
  25.         //調用生成數組的方法
  26.         int[] arr=generateArray(6,100);
  27.         //輸出生成的數組
  28.         System.out.println("生成的數組為:"+Arrays.toString(arr));
  29.     }
  30. }

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

2 猜字母游戲——實現游戲等級

為猜字母游戲添加游戲等級。游戲等級設為三等:5、7和9,代表所需要猜測的字母個數。游戲開始時,由玩家選擇游戲等級(5,7,9)。如果選擇7,則會隨機產生7個字符,然后玩家輸入一個字符串包含7個字符,看這7個字符和隨機產生的7個字符比較,看是否正確,並統計分數。另外,如果輸入其它,重新提示輸入游戲等級。系統交互情況如圖-1所示:

圖- 1

參考答案

首先,使用循環,判斷玩家輸入的等級。如果玩家輸入的等級不是5,7,9當中的一個,那么循環一直進行下去。

其次,在循環中,使用Scanner類的nextInt方法,接收控制台輸入的游戲等級。

實現此案例需要按照如下步驟進行。

步驟一:判斷玩家輸入的等級

在課上案例的基礎上,首先,在GuessingGame類的main方法中,使用do-while循環,判斷玩家輸入的等級。循環進行的條件為:玩家輸入的等級不是5,7,9當中的一個,即,當用戶輸入非5,7,9當中一個時,循環繼續;然后,更改generate方法的聲明,傳入等級參數,代碼如下所示:

 
  1. import java.util.Scanner;
  2. public class GuessingGame {
  3.     public static void main(String[] args) {
  4.         // 表示玩家猜測的次數
  5.         int count = 0;
  6.         // 用於保存判斷的結果
  7.         int[] result = new int[2];
  8.         Scanner scanner = new Scanner(System.in);
  9.         System.out.println("GuessingGame>歡迎嘗試猜字母游戲!");
  10.         // 表示游戲等級,默認為5
  11.         int level = 5;
  12.         do {
  13.         
  14.         } while (level != 5 && level != 7 && level != 9);
  15.         // 表示猜測的字符串
  16.         char[] chs = generate(level);
  17.         System.out.println(chs);
  18.         System.out.println("GuessingGame>游戲開始,請輸入你所猜的5個字母序列:(exit——退出)");
  19.         while (true) {
  20.             String inputStr = scanner.next().trim().toUpperCase();
  21.             if ("EXIT".equals(inputStr)) {
  22.                 System.out.println("GuessingGame>謝謝你的嘗試,再見!");
  23.                 break;
  24.             }
  25.             char[] input = inputStr.toCharArray();
  26.             result = check(chs, input);
  27.             if (result[0] == chs.length) {// 完全猜對的情況
  28.                 int score = 100 * chs.length - count * 10;
  29.                 System.out.println("GuessingGame>恭喜你猜對了!你的得分是:" + score);
  30.                 break;
  31.             } else {
  32.                 count++;
  33.                 System.out.println("GuessingGame>你猜對" + result[1] + "個字符,其中"
  34.                         + result[0] + "個字符的位置正確!(總次數=" + count + ",exit——退出)");
  35.             }
  36.         }
  37.         scanner.close();
  38.     }
  39.     /**
  40.      * 隨機生成需要猜測的字母序列
  41.      *
  42.      * @return 存儲隨機字符的數組
  43.      */
  44.     public static char[] generate(int level) {
  45.         char[] letters = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
  46.                 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
  47.                 'W', 'X', 'Y', 'Z' };
  48.         boolean[] flags = new boolean[letters.length];
  49.         char[] chs = new char[level];
  50.         for (int i = 0; i < chs.length; i++) {
  51.             int index;
  52.             do {
  53.                 index = (int) (Math.random() * (letters.length));
  54.             } while (flags[index]);// 判斷生成的字符是否重復
  55.             chs[i] = letters[index];
  56.             flags[index] = true;
  57.         }
  58.         return chs;
  59.     }
  60.     /**
  61.      * 比較玩家輸入的字母序列和程序所生成的字母序列,逐一比較字符及其位置,並記載比較結果
  62.      *
  63.      * @param chs
  64.      * 程序生成的字符序列
  65.      * @param input
  66.      * 玩家輸入的字符序列
  67.      * @return 存儲比較的結果。返回值int數組 的長度為2,其中,索引為0的位置
  68.      * 用於存放完全猜對的字母個數(字符和位置均正確),索引為1的位置用於存放猜對的字母個數(字符正確,但是位置不正確)。
  69.      */
  70.     public static int[] check(char[] chs, char[] input) {
  71.         int[] result = new int[2];
  72.         for (int i = 0; i < input.length; i++) {
  73.             for (int j = 0; j < chs.length; j++) {
  74.                 if (input[i] == chs[j]) {// 判斷字符是否正確
  75.                     result[1]++;
  76.                     if (i == j) {// 判斷位置是否正確
  77.                         result[0]++;
  78.                     }
  79.                     break;
  80.                 }
  81.             }
  82.         }
  83.         return result;
  84.     }
  85. }

步驟二:接收控制台輸入

在循環中,首先提示玩家輸入游戲等級,然后使用Scanner類的nextInt方法,接收玩家輸入的信息。代碼如下所示:

 
  1. import java.util.Scanner;
  2. public class GuessingGame {
  3.     public static void main(String[] args) {
  4.         // 表示玩家猜測的次數
  5.         int count = 0;
  6.         // 用於保存判斷的結果
  7.         int[] result = new int[2];
  8.         Scanner scanner = new Scanner(System.in);
  9.         System.out.println("GuessingGame>歡迎嘗試猜字母游戲!");
  10.         // 表示游戲等級,默認為5
  11.         int level = 5;
  12.         do {
  13.             System.out.print("GuessingGame>請輸入游戲級別(5、7、9)?");
  14.             level = scanner.nextInt();
  15.         } while (level != 5 && level != 7 && level != 9);
  16.         // 表示猜測的字符串
  17.         char[] chs = generate(level);
  18.         System.out.println(chs);
  19.         System.out.println("GuessingGame>游戲開始,請輸入你所猜的5個字母序列:(exit——退出)");
  20.         while (true) {
  21.             String inputStr = scanner.next().trim().toUpperCase();
  22.             if ("EXIT".equals(inputStr)) {
  23.                 System.out.println("GuessingGame>謝謝你的嘗試,再見!");
  24.                 break;
  25.             }
  26.             char[] input = inputStr.toCharArray();
  27.             result = check(chs, input);
  28.             if (result[0] == chs.length) {// 完全猜對的情況
  29.                 int score = 100 * chs.length - count * 10;
  30.                 System.out.println("GuessingGame>恭喜你猜對了!你的得分是:" + score);
  31.                 break;
  32.             } else {
  33.                 count++;
  34.                 System.out.println("GuessingGame>你猜對" + result[1] + "個字符,其中"
  35.                         + result[0] + "個字符的位置正確!(總次數=" + count + ",exit——退出)");
  36.             }
  37.         }
  38.         scanner.close();
  39.     }
  40.     /**
  41.      * 隨機生成需要猜測的字母序列
  42.      *
  43.      * @return 存儲隨機字符的數組
  44.      */
  45.     public static char[] generate(int level) {
  46.         char[] letters = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
  47.                 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
  48.                 'W', 'X', 'Y', 'Z' };
  49.         boolean[] flags = new boolean[letters.length];
  50.         char[] chs = new char[level];
  51.         for (int i = 0; i < chs.length; i++) {
  52.             int index;
  53.             do {
  54.                 index = (int) (Math.random() * (letters.length));
  55.             } while (flags[index]);// 判斷生成的字符是否重復
  56.             chs[i] = letters[index];
  57.             flags[index] = true;
  58.         }
  59.         return chs;
  60.     }
  61.     /**
  62.      * 比較玩家輸入的字母序列和程序所生成的字母序列,逐一比較字符及其位置,並記載比較結果
  63.      *
  64.      * @param chs
  65.      * 程序生成的字符序列
  66.      * @param input
  67.      * 玩家輸入的字符序列
  68.      * @return 存儲比較的結果。返回值int數組 的長度為2,其中,索引為0的位置
  69.      * 用於存放完全猜對的字母個數(字符和位置均正確),索引為1的位置用於存放猜對的字母個數(字符正確,但是位置不正確)。
  70.      */
  71.     public static int[] check(char[] chs, char[] input) {
  72.         int[] result = new int[2];
  73.         for (int i = 0; i < input.length; i++) {
  74.             for (int j = 0; j < chs.length; j++) {
  75.                 if (input[i] == chs[j]) {// 判斷字符是否正確
  76.                     result[1]++;
  77.                     if (i == j) {// 判斷位置是否正確
  78.                         result[0]++;
  79.                     }
  80.                     break;
  81.                 }
  82.             }
  83.         }
  84.         return result;
  85.     }
  86. }

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

 
  1. import java.util.Scanner;
  2. public class GuessingGame {
  3.     public static void main(String[] args) {
  4.         // 表示玩家猜測的次數
  5.         int count = 0;
  6.         // 用於保存判斷的結果
  7.         int[] result = new int[2];
  8.         Scanner scanner = new Scanner(System.in);
  9.         System.out.println("GuessingGame>歡迎嘗試猜字母游戲!");
  10.         // 表示游戲等級,默認為5
  11.         int level = 5;
  12.         do {
  13.             System.out.print("GuessingGame>請輸入游戲級別(5、7、9)?");
  14.             level = scanner.nextInt();
  15.         } while (level != 5 && level != 7 && level != 9);
  16.         // 表示猜測的字符串
  17.         char[] chs = generate(level);
  18.         System.out.println(chs);
  19.         System.out.println("GuessingGame>游戲開始,請輸入你所猜的5個字母序列:(exit——退出)");
  20.         while (true) {
  21.             String inputStr = scanner.next().trim().toUpperCase();
  22.             if ("EXIT".equals(inputStr)) {
  23.                 System.out.println("GuessingGame>謝謝你的嘗試,再見!");
  24.                 break;
  25.             }
  26.             char[] input = inputStr.toCharArray();
  27.             result = check(chs, input);
  28.             if (result[0] == chs.length) {// 完全猜對的情況
  29.                 int score = 100 * chs.length - count * 10;
  30.                 System.out.println("GuessingGame>恭喜你猜對了!你的得分是:" + score);
  31.                 break;
  32.             } else {
  33.                 count++;
  34.                 System.out.println("GuessingGame>你猜對" + result[1] + "個字符,其中"
  35.                         + result[0] + "個字符的位置正確!(總次數=" + count + ",exit——退出)");
  36.             }
  37.         }
  38.         scanner.close();
  39.     }
  40.     /**
  41.      * 隨機生成需要猜測的字母序列
  42.      *
  43.      * @return 存儲隨機字符的數組
  44.      */
  45.     public static char[] generate(int level) {
  46.         char[] letters = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
  47.                 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
  48.                 'W', 'X', 'Y', 'Z' };
  49.         boolean[] flags = new boolean[letters.length];
  50.         char[] chs = new char[level];
  51.         for (int i = 0; i < chs.length; i++) {
  52.             int index;
  53.             do {
  54.                 index = (int) (Math.random() * (letters.length));
  55.             } while (flags[index]);// 判斷生成的字符是否重復
  56.             chs[i] = letters[index];
  57.             flags[index] = true;
  58.         }
  59.         return chs;
  60.     }
  61.     /**
  62.      * 比較玩家輸入的字母序列和程序所生成的字母序列,逐一比較字符及其位置,並記載比較結果
  63.      *
  64.      * @param chs
  65.      * 程序生成的字符序列
  66.      * @param input
  67.      * 玩家輸入的字符序列
  68.      * @return 存儲比較的結果。返回值int數組 的長度為2,其中,索引為0的位置
  69.      * 用於存放完全猜對的字母個數(字符和位置均正確),索引為1的位置用於存放猜對的字母個數(字符正確,但是位置不正確)。
  70.      */
  71.     public static int[] check(char[] chs, char[] input) {
  72.         int[] result = new int[2];
  73.         for (int i = 0; i < input.length; i++) {
  74.             for (int j = 0; j < chs.length; j++) {
  75.                 if (input[i] == chs[j]) {// 判斷字符是否正確
  76.                     result[1]++;
  77.                     if (i == j) {// 判斷位置是否正確
  78.                         result[0]++;
  79.                     }
  80.                     break;
  81.                 }
  82.             }
  83.         }
  84.         return result;
  85.     }
  86.  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM