You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java displayWord方法进入if分支但字符数组赋值后全为问号

问题原因

你的内层循环逻辑存在值覆盖错误:每次内层j循环匹配失败时,else分支都会把displayedWord[i]重置为?。哪怕当前位置i已经在之前的j循环中匹配成功、被赋值为正确字符,只要后续j轮次匹配失败,正确的赋值就会被问号覆盖。

这也是为什么你能看到if块内的打印语句——代码确实进入过匹配成功的分支,但后续的循环步骤把正确值覆盖掉了。举个实际运行的例子:
假设wordArray[i] = 'h',correctGuesses = ['h', 'e', 'l']:

  • j=0时匹配成功:displayedWord[i]被赋值为'h',打印"they are the same"
  • j=1时字符对比不相等:触发else,displayedWord[i]被改成'?'
  • j=2时字符对比不相等:再次触发else,displayedWord[i]保持为'?'
    内层循环走完后,该位置最终还是问号。
修复方法

核心思路是:不要在内层循环里反复给displayedWord[i]赋问号,只在匹配成功时更新值即可,可选两种实现:

  • 方案1:初始化数组时先把所有位置填充为问号,内层循环只处理匹配成功的逻辑,匹配到后直接break跳出内层循环,避免多余遍历:
// 注意使用Arrays.fill需要导入java.util.Arrays
import java.util.Arrays;

public static void displayWord(char[] correctGuesses, char[] wordArray) {
    char[] displayedWord = new char[wordArray.length];
    // 初始化所有位置为问号
    Arrays.fill(displayedWord, '?');
    for(int i = 0; i < wordArray.length; i++) {
        for(int j = 0; j < correctGuesses.length; j++) {
            if(wordArray[i] == correctGuesses[j]) {
                displayedWord[i] = wordArray[i];
                System.out.println("they are the same");
                break; // 匹配成功就不用检查剩余猜测字符
            }
        }
    }
    for(char c : displayedWord) {
        System.out.print(c);
    }
}
  • 方案2:不想导包的话,在外层i循环开始时先给当前位置设为问号,内层循环同样匹配成功就赋值+break:
public static void displayWord(char[] correctGuesses, char[] wordArray) {
    char[] displayedWord = new char[wordArray.length];
    for(int i = 0; i < wordArray.length; i++) {
        displayedWord[i] = '?';
        for(int j = 0; j < correctGuesses.length; j++) {
            if(wordArray[i] == correctGuesses[j]) {
                displayedWord[i] = wordArray[i];
                System.out.println("they are the same");
                break;
            }
        }
    }
    for(char c : displayedWord) {
        System.out.print(c);
    }
}

内容的提问来源于stack exchange,提问作者MouseWarrior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 08:31:01