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

Java中用Stack实现反向猜词游戏时无法按指定顺序输出的问题

异常原因
  • 字符拼接顺序错误:每次将栈弹出的字符追加到test字符串末尾,但栈弹出顺序是从后往前的字母(以cheese为例,弹出顺序为e→s→e→e→h→c),追加到末尾会导致已揭示的字母顺序完全倒置。比如第一次弹出e存入test,第二次弹出s追加到test末尾得到es,展示时栈顶s加test会得到ses,和预期的se顺序相反。
  • 输出逻辑错误:每轮开头先输出letters.peek() + test,把当前栈顶还没弹出的字母直接拼在已揭示的test前面,随后又把该字母弹出追加到test末尾,双重逻辑导致顺序进一步错乱。
  • 循环条件错误:用guesses < letters.size()作为循环判断条件,但letters.size()会随着pop操作不断减小,会导致循环次数和预期的单词长度不一致。
修复方案

修改核心逻辑:提前保存单词总长度控制循环;每次将新弹出的字符拼在test的最前面,而非末尾;调整输出逻辑,下划线数量为剩余未揭示的字母数,直接输出下划线加已揭示的格式化test字符串即可。
修复后代码如下:

// 提前保存单词总长度
int totalLength = letters.size();
int guesses = 0;
String test = "";
int score = 0;
Scanner sc = new Scanner(System.in);

while(guesses < totalLength){
    System.out.print("Your word is: ");
    // 计算需要输出的下划线数量
    int underLineCount = totalLength - test.length() - 1;
    for(int i = 0; i < underLineCount; i++){
        System.out.print("_ ");
    }
    // 格式化输出已揭示的字母,字母之间加空格
    if(test.isEmpty()){
        System.out.println(letters.peek());
    }else{
        System.out.println(letters.peek() + " " + String.join(" ", test.split("")));
    }
    System.out.println("Score: " + score);
    System.out.print("What letter do you guess? ");
    char guess = sc.next().charAt(0);
    Character current = letters.pop();
    if(guess == current){
        score++;
    }else{
        score--;
    }
    // 新弹出的字符拼在test最前面保证顺序正确
    test = current + test;
    guesses++;
}
// 循环结束输出完整单词
System.out.println("Your word is: " + String.join(" ", test.split("")));
System.out.println("Gameover!");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:18:04