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

JavaScript年龄猜测器while循环终止问题排查与修复求助

年龄猜测器JavaScript版本故障分析与修复方案

我正在开发一个年龄猜测器项目,用来测试自己的Java、Python和JavaScript编程技能。Java和Python版本运行稳定,但JavaScript版本存在循环无法终止的问题——最初尝试用break终止while循环没成功,改用终止变量terminatornum控制循环仍无效。

错误原因分析

  1. 输入大小写不兼容:代码中判断条件严格匹配"Yes"、"Older"、"Younger",但用户输入时可能不小心用小写(如"yes"),导致条件不触发,循环无法终止。
  2. 未处理prompt返回null的情况:当用户点击prompt弹窗的「取消」按钮时,response会返回null,此时所有条件都不满足,终止变量不会被修改,循环无限执行。
  3. 终止变量逻辑冗余且易出错:使用terminatornum控制循环的方式没必要,反而增加了出错概率,不如直接沿用Java、Python版本的break逻辑更直观。
  4. 字符串拼接格式问题:结果输出的字符串缺少空格(age + "years old"),显示效果不规范。

修复方案

  • 统一输入的大小写:将用户输入的字符串转为小写后再进行比较,兼容不同输入格式。
  • 处理null输入:当用户取消输入时,直接终止循环。
  • 改用break终止循环:和Java、Python版本保持一致逻辑,代码更简洁易懂。
  • 修正输出字符串的格式错误。

修复后的JavaScript代码

let age = 64;
let power = 5;
while (true) {
    let response = window.prompt("Are you " + age + " years old? Answer with 'Yes', 'Older' or 'Younger'. Nothing else.");
    // 处理取消输入的情况
    if (response === null) {
        console.log("操作取消");
        break;
    }
    // 转为小写统一判断
    const lowerResponse = response.toLowerCase();
    if (lowerResponse === "yes") {
        console.log("Nice! You are " + age + " years old!");
        break;
    } 
    if (lowerResponse === "older") {
        age += (2 ** power);
        power -= 1;
    }
    if (lowerResponse === "younger") {
        age -= (2 ** power);
        power -= 1;
    }
    if (power === -1) {
        console.log("Nice! You are " + age + " years old!");
        break;
    }
}

原Java代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int age;
        int power;
        String response;
        age = 64;
        power = 5;
        while (true) {
            Scanner input = new Scanner(System.in);
            System.out.print("Are you ");
            System.out.print(age);
            System.out.print(" years old? Answer with 'Yes', 'Older' or 'Younger'. Nothing else.");
            response = input.next(); 
            if (response.equals("Yes")){
                System.out.print("Nice! You are ");
                System.out.print(age);
                break;
            }
            if (response.equals("Older")){
               age = age + (int)(Math.pow(2, power));
               power = power - 1;
            }
            if (response.equals("Younger")){
                age = age - (int)(Math.pow(2, power));
                power = power - 1;
            }
            if (power == -1){
                System.out.print("Nice! You are ");
                System.out.print(age);
                break;
            }
        }      
    }
}

原Python代码

age = 64
power = 5
while True:
    response = input("Are you {0} years old? Answer with 'Yes', 'Older' or 'Younger'. Nothing else.".format(age))
    if response == "Yes":
        print("Nice! You are {0} years old!".format(age))
        break
    if response == "Older":
        age += (2**power)
        power -= 1
    if response == "Younger":
        age -= (2**power)
        power -= 1
    if power == -1:
        print("Nice! You are {0} years old!".format(age))
        break

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:33:14