Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试生成基本数学运算时返回NaN的函数_Javascript - Fatal编程技术网

Javascript 尝试生成基本数学运算时返回NaN的函数

Javascript 尝试生成基本数学运算时返回NaN的函数,javascript,Javascript,我试图随机生成基本的数学运算(加法、减法、乘法和除法),有时我的函数返回NaN。 我使用了函数parseInt(),但仍然存在相同的问题。如果有人能帮我提建议,我将不胜感激。 提前谢谢你 Here is my code: function randNum(min,max) { var num = min+Math.floor((Math.random()*(max-min+1))); return num; } var choose, operator, firstNum,

我试图随机生成基本的数学运算(加法、减法、乘法和除法),有时我的函数返回NaN。 我使用了函数parseInt(),但仍然存在相同的问题。如果有人能帮我提建议,我将不胜感激。 提前谢谢你

Here is my code:

function randNum(min,max)
{
    var num = min+Math.floor((Math.random()*(max-min+1)));
    return num;
}

var choose, operator, firstNum, secondNum,rightAnswer;
function getProb()
{
    var chooseOp=randNum(1,4);
    choose=parseInt(chooseOp);

if (choose==1)
{
    oprator="+";
    var choose1=randNum(0,10);
    var choose2=randNum(0,10);
    firstNum=parseInt(choose1);
    secondNum=parseInt(choose2);
    document.getElementById("mathProb").innerHTML=firstNum+operator+secondNum+"=";
    rightAnswer=choose1 + choose2;
}
else if (choose==2)
{
    operator="-";
    var choose1=randNum(0,10);
    var choose2=randNum(0,10);
    firstNum=parseInt(choose1);
    secondNum=parseInt(choose2);
    document.getElementById("mathProb").innerHTML=firstNum+operator+secondNum+"=";
    rightAnswer=firstNum - secondNum;
}
else if (choose==3)
{
    operator="x";
    var choose1=randNum(0,10);
    var choose2=randNum(0,10);
    firstNum=parseInt(choose1);
    secondNum=parseInt(choose2);
    document.getElementById("mathProb").innerHTML=firstNum+operator+secondNum+"=";
    rightAnswer=choose1 * choose2;
}
    else if (choose==4)
{
    operator="/";
    var choose1=randNum(0,10);
    var choose2=randNum(0,10);
    firstNum=parseInt(choose1);
    secondNum=parseInt(choose2);
    document.getElementById("mathProb").innerHTML=firstNum+operator+secondNum+"=";
    rightAnswer=choose1/choose2;
}
}

您需要指定一个表示数字系统的数字,特别是以10为基数

将数字10添加到函数调用中,如下所示

firstNum = parseInt(choose1, 10);

您需要指定一个表示数字系统的数字,特别是以10为基数

将数字10添加到函数调用中,如下所示

firstNum = parseInt(choose1, 10);

您的除法运算有可能被零除,这将返回NaN。

您的除法运算有可能被零除,这将返回NaN。

您的“NaN”错误如下:

rightAnswer=choose1/choose2;
choose1
a
choose2
[0,1]
中的整数

一次超过121,你将0除以0,得到
NaN

11除以不到一次,你将一个非空数除以0,得到无穷大,你的“NaN”错误在这里:

rightAnswer=choose1/choose2;
choose1
a
choose2
[0,1]
中的整数

一次超过121,你将0除以0,得到
NaN


不到11的1倍,你将一个非空数除以0,得到无穷大,这是一个简单的语法错误:

oprator="+"; // should be `operator`
这就是为什么这句话

firstNum+运算符+secondNum+“=”

。。。将实际评估为

firstNum+未定义+secondNum+“=”

第一对将为您提供
NaN
NaN
+数字将再次成为
NaN
NaN
+字符串(
“=”
)将导致
NaN
转换为字符串,然后附加“=”(因此产生“NaN=”)

我强烈建议将
置于“严格使用”行以捕获此类错误。这样,您将得到一个错误:

ReferenceError:分配给未声明的变量oprator

。。。并且不需要这样做,而是解析脚本中的错误。)

旁注,我有很多:

  • 您的
    randNum
    函数将返回一个数字,因此无需在其结果上使用
    parseInt
    (您可能需要转换此函数的参数,但即使在这里似乎也没有必要)

  • 如果你除以零,你会得到无穷大;如果将0除以0,则得到
    NaN
    ;准备或调整最小值。)

  • 如果您重复输出结果的大多数语句,为什么不将它们转换为函数呢?检查代码段(由@sv_in开始,由我完成)以了解如何执行


    • 这是一个简单的语法错误:

      oprator="+"; // should be `operator`
      
      这就是为什么这句话

      firstNum+运算符+secondNum+“=”

      。。。将实际评估为

      firstNum+未定义+secondNum+“=”

      第一对将为您提供
      NaN
      NaN
      +数字将再次成为
      NaN
      NaN
      +字符串(
      “=”
      )将导致
      NaN
      转换为字符串,然后附加“=”(因此产生“NaN=”)

      我强烈建议将
      置于“严格使用”行以捕获此类错误。这样,您将得到一个错误:

      ReferenceError:分配给未声明的变量oprator

      。。。并且不需要这样做,而是解析脚本中的错误。)

      旁注,我有很多:

      • 您的
        randNum
        函数将返回一个数字,因此无需在其结果上使用
        parseInt
        (您可能需要转换此函数的参数,但即使在这里似乎也没有必要)

      • 如果你除以零,你会得到无穷大;如果将0除以0,则得到
        NaN
        ;准备或调整最小值。)

      • 如果您重复输出结果的大多数语句,为什么不将它们转换为函数呢?检查代码段(由@sv_in开始,由我完成)以了解如何执行


      当您随机选择除法运算符时,对于
      choose1
      choose1
      ,都可能出现零,这意味着您试图计算
      rightAnswer=0/0。在Javascript中,这等于
      NaN
      。此外,这应该更经常发生,如果你在分母中选择零,在分子中选择任何其他数字,答案将显示为
      无穷
      。当然,任何事物上的零都是零。

      当您随机选择除法运算符时,对于
      choose1
      choose1
      ,都可能出现零,这意味着您试图计算
      rightAnswer=0/0。在Javascript中,这等于
      NaN
      。此外,这应该更经常发生,如果你在分母中选择零,在分子中选择任何其他数字,答案将显示为
      无穷
      。当然,任何事物的零都是零。

      choose==1
      时,
      操作符
      被拼错为
      oprator
      。若你们纠正它,问题就解决了

      更新:
      您的代码可以缩短为:

      choose==1
      时,
      operator
      拼写错误为
      operator
      。若你们纠正它,问题就解决了

      更新:
      您的代码可以缩短为:

      我还建议使用一个构造来避免所有这些
      if(choose==
      。这里根本不需要使用
      parseInt()
      choose1/choose2
      有时是无穷大。@Shusl choose2是一个I