Java实现hangman猜水果游戏输入字符后已猜对内容重置问题求助
Hangman猜词游戏代码修复
问题原因
原代码每次仅基于当前输入的字符生成输出,没有存储历史猜对的字符记录,也没有更新初始的进度变量,导致每次输入都会覆盖之前的猜对结果。
修改思路
- 用字符数组存储猜词进度,替代不可变的String类型,方便直接修改对应位置的字符
- 每次用户输入字符后,匹配原单词对应位置,匹配成功就更新进度数组的对应位置
- 每次输出更新后的进度数组,即可保留所有历史猜对的内容
修改后代码
import java.util.*; public class game { public static void main(String args[]) { Scanner in = new Scanner(System.in); String list[] = {"apple", "banana", "mango", "kiwi", "coconut", "papaya", "lichi", "strawberry", "orange", "cherry"}; // 这里修改为动态取数组长度,避免后续加新词时索引越界 int rand = (int)(Math.random()*list.length); String word = list[rand]; // 初始化进度数组 char[] progress = new char[word.length()]; for(int i = 0; i < word.length();i++){ progress[i] = '_'; } System.out.println(new String(progress)); System.out.println("hint: It is a fruit"); for (int j = 1; j<=15; j++){ System.out.println("\nEnter a character: "); char input = in.next().charAt(0); // 更新进度数组 for (int i = 0; i < word.length(); i++){ if(input == word.charAt(i)){ progress[i] = input; } } // 输出最新进度 System.out.print(new String(progress)); // 新增全对判断,提前结束游戏 boolean allGuessed = true; for (char c : progress) { if (c == '_') { allGuessed = false; break; } } if (allGuessed) { System.out.println("\n猜对了!正确单词是" + word); break; } } in.close(); } }
效果说明
修改后所有猜对的字符都会永久保存在progress数组中,不会随新的输入重置,符合hangman游戏的正常展示逻辑。
内容的提问来源于stack exchange,提问作者coder_xyz
相关产品推荐
相关产品推荐

