Java黑皮书课后题第7章:***7.35(游戏:猜字词游戏)编写一个猜字词游戏,随机产生一个单词,当用户猜测正确后,正确的字母显示出来。当用户猜出一个单词,显示猜错的次数,并询问用户是否继续猜测

***7.35(游戏:猜字词游戏)编写一个猜字词游戏,随机产生一个单词,当用户猜测正确后,正确的字母显示出来。当用户猜出一个单词,显示猜错的次数,并询问用户是否继续猜测

  • 题目
    • 题目描述与运行示例
    • 破题
  • 代码

题目

题目描述与运行示例

***7.35(游戏:猜字词游戏)编写一个猜字词游戏,随机产生一个单词,如运行示例所示。单词中的每个字母显示为1个星号。
当用户猜测正确后,正确的字母显示出来。
当用户猜出一个单词,显示猜错的次数,并询问用户是否继续猜测
声明一个数组来存储单词,如下所示:
//Add any words you wish in this array
String[] words = {“write”, “that”,…}
运行示例:

(Guess) Enter a letter in word ****** > 
p
(Guess) Enter a letter in word ****** > 
w
(Guess) Enter a letter in word w***** > 
o
(Guess) Enter a letter in word w***** > 
r
(Guess) Enter a letter in word wr**** > 
i
(Guess) Enter a letter in word wri*** > 
t
(Guess) Enter a letter in word writ** > 
e
(Guess) Enter a letter in word write* > 
n
The word is writen. You missed 2 times
Do you want to guess another word? Enter y or n>n

破题

  1. 主方法:设置一个array保存猜测的单词
  2. 主方法:获取这个array的长度赋值给int型变量length
  3. 主方法:设置一个boolean对象bool,赋值为true,循环继续条件
  4. 主方法:设置一个int型变量int_random,用于接收随机值;String类str接收对应单词
  5. 主方法:循环体头,循环继续判断条件为bool
  6. 主方法:给int_random赋值(int)(Math.random() * length)
  7. 主方法:array[int_random]选出对应单词,赋值给str
  8. 主方法:调用自定义方法guess,传入str,用int型变量接收猜错次数
  9. 主方法:输出猜错次数的语句
  10. 主方法:输出是否继续语句,如果用户输入n则将bool改为false
  11. 自定义方法guess: 获取输入str(String对象)长度为length
  12. 自定义方法guess: 声明一个长度为length的char型数组
  13. 自定义方法guess: 将str中的每个字符传递值给char数组
  14. 自定义方法guess: 再声明一个boolean型数组,char数组的下标对应int型下标,全部采用初始值为false,表示未猜出
  15. 自定义方法guess: 创建一个int型记猜错次数初始0,一个boolean对象bool初始为true(当单词全部猜出时设置为false)
  16. 自定义方法guess: 循环体头,判断条件为bool
  17. 自定义方法guess: 输出guess语句(boolean数组元素为false的输出*,下标为true的输出对应的char元素字符)并接收用户输入的字符
  18. 自定义方法guess: 对用户输入字符进行接收
  19. 自定义方法guess: 与char型元素比较,有匹配的则将对应的boolean数组值改为true,没匹配则计数变量+1
  20. 自定义方法guess: 判断boolean数组是否全为true,调用自定义方法isAllTrue,如果返回值是true则将判断条件的bool改为false
  21. 自定义方法guess: 循环体结束语句
  22. 自定义方法guess: 返回计数变量
  23. 自定义方法isAllTrue:获取传入的boolean数组长度length
  24. 自定义方法isAllTrue:设置一个标签boolean,初始值为true
  25. 自定义方法isAllTrue:对boolean数组进行遍历,如果有false,则将标签设置为false
  26. 自定义方法isAllTrue:返回标签

代码

import java.util.Objects;
import java.util.Scanner;public class Test7_35 {public static void main(String[] args) {//1. 主方法:设置一个array保存猜测的单词String[] str_words = {"writen", "that", "program"};//2. 主方法:获取这个array的长度赋值给int型变量lengthint length = str_words.length;//3. 主方法:设置一个boolean对象bool,赋值为true,循环继续条件boolean bool = true;//4. 主方法:设置一个int型变量int_random,用于接收随机值;String类str接收对应单词int int_random = 0, count_guess = 0;String str = "";//5. 主方法:循环体头,循环继续判断条件为boolwhile (bool){//6. 主方法:给int_random赋值(int)(Math.random() * length)int_random = (int)(Math.random() * length);//7. 主方法:array[int_random]选出对应单词,赋值给strstr = str_words[int_random];//8. 主方法:调用自定义方法,传入str,用int型变量接收猜错次数count_guess = guess(str);//9. 主方法:输出猜错次数的语句System.out.println("The word is " + str + ". You missed " + count_guess + " times");//10. 主方法:输出是否继续语句,如果用户输入n则将bool改为falseSystem.out.print("Do you want to guess another word? Enter y or n>");Scanner input = new Scanner(System.in);if (Objects.equals(input.next(), "n")){bool = false;}}}private static int guess(String str) {//11. 自定义方法guess: 获取输入str(String对象)长度为length_strint length_str = str.length();//12. 自定义方法guess: 声明一个长度为length的char型数组str_charchar[] str_char = new char[length_str];//13. 自定义方法guess: 将str中的每个字符传递值给char数组for (int i = 0 ; i < length_str ; i++){str_char[i] = str.charAt(i);}//14. 自定义方法guess: 再声明一个boolean型数组,char数组的下标对应int型下标,全部采用初始值为false,表示未猜出boolean[] bool_char = new boolean[length_str];//15. 自定义方法guess: 创建一个int型记猜错次数初始0,一个boolean对象bool初始为true(当单词全部猜出时设置为false)int count = 0;boolean bool = true;//16. 自定义方法guess: 循环体头,判断条件为boolwhile (bool){//17. 自定义方法guess: 输出guess语句(boolean数组元素为false的输出*,下标为true的输出对应的char元素字符)并接收用户输入的字符Scanner input = new Scanner(System.in);System.out.print("(Guess) Enter a letter in word ");for (int i = 0 ; i < length_str ; i++){if ( !bool_char[i] ){System.out.print("*");}else {System.out.print(str_char[i]);}}System.out.println(" > ");//18. 自定义方法guess: 对用户输入字符进行接收String temp = input.next();char ch_guess = temp.charAt(0);//19. 自定义方法guess: 与char型元素比较,有匹配的则将对应的boolean数组值改为true,没匹配则计数变量+1boolean bool_temp = false;for (int i = 0 ; i <length_str ; i++){if (ch_guess == str_char[i]){bool_char[i] = true;bool_temp = true;}}if ( !bool_temp ){++count;}//20. 自定义方法guess: 判断boolean数组是否全为true,如果是则将判断条件的bool改为falseif (isAllTrue(bool_char)){bool = false;}}//22. 自定义方法guess: 返回计数变量return count;}//自定义方法:看传入的boolean数组是不是全为truepublic static boolean isAllTrue(boolean[] bool){int length = bool.length;boolean sym = true;for (int i = 0 ; i <length ; i++){if ( !bool[i] ){sym = false;break;}}return sym;}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部