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

JavaScript计算器开发问题:inputUser函数使用不当导致运算结果返回NaN的求助

解决计算器重复输入逻辑与NaN错误问题

你已经意识到重复代码的问题,这点做得非常好!当前的bug主要出在多值返回的写法错误和运算函数未接收输入值这两个环节,咱们一步步来修复:

问题1:inputUser()的返回值逻辑错误

JavaScript里的逗号运算符不会帮你返回多个值,return number1, number2;实际上只会返回最后一个值number2,而且你没有把获取到的数字传递给运算函数,导致运算函数里的变量完全是未定义状态。

问题2:运算函数未接收参数

你的addition()和subtraction()函数里的nb1、nb2都是未赋值的变量,默认值是undefined,undefined + undefined自然会得到NaN。


完整修复方案

步骤1:修改inputUser(),返回包含两个数字的数组

用数组来包装两个输入值,这样就能一次性返回两个数字:

function inputUser(){
  var number1 = readline.questionInt("Enter number 1 please : ");
  var number2 = readline.questionInt("Enter number 2 please : ");
  return [number1, number2]; // 返回包含两个数字的数组
}

步骤2:修改运算函数,让它们接收参数

让运算函数直接使用传入的参数进行计算,不再依赖未定义的内部变量:

function addition(nb1, nb2){
  return nb1 + nb2; // 直接用参数计算并返回结果
}
function subtraction(nb1, nb2){
  return nb1 - nb2;
}

步骤3:在switch分支中接收输入值并传递给运算函数

调用inputUser()后,通过数组解构(或索引)获取两个数字,再传给对应的运算函数:

switch(choice){
  case 1:
    console.log("Option 1 - Addition ");
    const [num1Add, num2Add] = inputUser(); // 解构数组得到两个数字
    var add = addition(num1Add, num2Add);
    console.log("The result is " + add);
    break;
  case 2:
    console.log("Option 2 - Subtraction ");
    const [num1Sub, num2Sub] = inputUser();
    var sub = subtraction(num1Sub, num2Sub);
    console.log("The result is " + sub);
    break;
}

如果不想用解构语法,也可以用数组索引获取值:

const numbers = inputUser();
var add = addition(numbers[0], numbers[1]);

额外优化小建议

  • 可以把inputUser()的提示文本做成参数,适配不同场景的提示需求:
    function inputUser(prompt1 = "Enter number 1 please : ", prompt2 = "Enter number 2 please : "){
      var number1 = readline.questionInt(prompt1);
      var number2 = readline.questionInt(prompt2);
      return [number1, number2];
    }
    
  • 注意变量名拼写一致性,你代码里出现了substraction和subtraction两种写法,统一拼写能避免后续不必要的bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:44:08