Java编写Hangman猜单词游戏条件为真时if语句不执行问题求解
Hangman游戏胜利判定不触发问题解决
问题原因
- 核心错误是使用
==比较两个ArrayList对象:Java中==针对引用类型比较的是对象的内存地址,而非存储的内容。你的代码中ans和answer是两个独立创建的集合实例,哪怕元素完全相同,==判断也永远返回false,所以胜利分支永远不会执行。
解决方案
最小改动方案(几乎不修改原有代码逻辑)
仅需将胜利判断的==替换为ArrayList的equals()方法即可,equals()会逐个对比集合内的元素内容和顺序,符合你的判定需求:
// 把原来的if (ans == answer) 改成下面的代码 if (ans.equals(answer)) { System.out.println("\nyou win"); break; }
可选冗余代码优化(可按需选择)
你代码中每次循环都重复创建answer集合的逻辑是冗余的,可以把这部分逻辑移到循环外提前生成,减少不必要的重复计算,修改后完整代码如下:
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()*9)+0; String word = list[rand]; String ask = "_"; for(int i = 1; i < word.length();i++){ ask = ask + "_"; } System.out.println(ask); System.out.println("hint: It is a fruit"); ArrayList<String> ans = new ArrayList<String>(); for (char i : ask.toCharArray()){ ans.add("_"); } // 提前生成正确答案集合,不用每次循环重复创建 ArrayList<String> answer = new ArrayList<String>(); for(char i : word.toCharArray()){ answer.add(String.valueOf(i)); } for (int j = 1; j<=15; j++){ System.out.println("Enter a character: "); String input = in.next(); char alt = input.charAt(0); int x = 0; for (char i : word.toCharArray()){ if(alt == i){ ans.set(x, input); } x++; } for (String i : ans){ System.out.print(i); } // 直接用equals比较内容 if (ans.equals(answer)){ System.out.println("\nyou win"); break; } System.out.println("\n"+ans); System.out.println(answer); } } }
内容的提问来源于stack exchange,提问作者coder_xyz
相关产品推荐
相关产品推荐

