JavaScript年龄猜测器while循环终止问题排查与修复求助
年龄猜测器JavaScript版本故障分析与修复方案
我正在开发一个年龄猜测器项目,用来测试自己的Java、Python和JavaScript编程技能。Java和Python版本运行稳定,但JavaScript版本存在循环无法终止的问题——最初尝试用break终止while循环没成功,改用终止变量terminatornum控制循环仍无效。
错误原因分析
- 输入大小写不兼容:代码中判断条件严格匹配
"Yes"、"Older"、"Younger",但用户输入时可能不小心用小写(如"yes"),导致条件不触发,循环无法终止。 - 未处理
prompt返回null的情况:当用户点击prompt弹窗的「取消」按钮时,response会返回null,此时所有条件都不满足,终止变量不会被修改,循环无限执行。 - 终止变量逻辑冗余且易出错:使用
terminatornum控制循环的方式没必要,反而增加了出错概率,不如直接沿用Java、Python版本的break逻辑更直观。 - 字符串拼接格式问题:结果输出的字符串缺少空格(
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
相关产品推荐
相关产品推荐

