在 Javascript 中制作数字表程序(如 12 x 1 = 12)的问题

Posted

技术标签:

【中文标题】在 Javascript 中制作数字表程序(如 12 x 1 = 12)的问题【英文标题】:Issue with making Number Tables Program (like 12 x 1 = 12) in Javascript 【发布时间】:2017-05-17 17:32:49 【问题描述】:

我正在尝试制作一个程序,可以为任何数字生成数学表,如下所示:

3 x 1 = 3

3 x 2 = 6

3 x 3 = 9

3 x 4 = 12

我需要用户输入:

(1)他们需要表格的任何数字(例如 - 3)

(2) 指定起点(例如 - 1)

(3) 指定一个终点(例如 - 4)

我目前有缺陷的代码如下:

    function isitanumber(numb)
        while (isNaN(numb) == true)
         		numb = parseInt(prompt("Please add a valid number","5"));
         	
         
    
    
    function mytable (thenum, first, second)
        for (var i=first; i<=second; i++)
        	var y = thenum*i;
        	document.write(thenum + " x " + i + " = " + y + "</br>");
         
        
    
    
    var mynum = parseInt(prompt("Enter the number you wish to have the table for", "40"));
    mynum = isitanumber(mynum);
    
    
    var startpoint = parseInt(prompt("Enter the startpoint of the table", "1")); 
    mynum = isitanumber(startpoint);
    
    var endpoint = parseInt(prompt("Enter the endpoint of the table", "10"));  
    mynum = isitanumber(endpoint);
    
    
    mytable(mynum,startpoint,endpoint);

【问题讨论】:

有什么问题? 每当我在第一个提示输入字母然后在第二个提示输入数字时,它都会给我 NaN。具体来说,我需要了解如何访问用户输入的最后一个值,该值将 isNaN 变为 false。 使用调试器查看变量是什么。 您的代码存在一些问题;你声明 mynum 3 次。您必须将最后两个更改为起点和终点。您还需要在 while 循环之后返回 numb 。 codepen.io/peerbolte/pen/pRoPQx?editors=1111 parseInt() 将删除数字后的字母,而不是相反。所以 parseInt('123abc') 将返回'123'。此外,我建议始终为 parseInt 方法指定一个基数,即 parseInt('123abc',10)。 10 表示它是十进制数,而不是十六进制、二进制或其他任何数字。 【参考方案1】:

isitanumber 返回您每次分配给mynum (mynum = isitanumber(...)) 的undefined(由没有return 语句的函数返回的默认值)。因此,mynum 包含 undefined 值。

您应该在完成循环 NaNs 时返回变量(并将其分配给适当的变量):

function isitanumber(numb)

    while (isNaN(numb)) 
            numb = parseInt(prompt("Please add a valid number","5"));
    
    return numb;


function mytable (num, start, end)

    for (var i = start; i <= end; i++) 
        var y = num * i;
        document.write(num + " x " + i + " = " + y + "</br>");
    


var mynum = parseInt(prompt("Enter the number you wish to have the table for", "40"));
mynum = isitanumber(mynum);

var startpoint = parseInt(prompt("Enter the startpoint of the table", "1")); 
startpoint = isitanumber(startpoint);

var endpoint = parseInt(prompt("Enter the endpoint of the table", "10"));  
endpoint = isitanumber(endpoint);

mytable(mynum, startpoint, endpoint);

【讨论】:

非常感谢您的详细回复!过去 8 小时一直被困在这段代码上,我想我现在已经脑死了。一个快速的问题 - 为什么添加“return”可以使它起作用?它在代码的流程中发生了什么变化?谢谢 @nishkaush:好吧,没有它,你的函数就不会返回值。但是您正在尝试使用函数返回的值。你能看出那是怎么回事吗? 对不起,我是 JS 的新手,但仍在弄清楚事情是如何工作的。有人告诉我不要使用 return,因为它会结束函数和循环,应该是最后的选择。但显然它在这里保存了我的代码。 @nishkaush 如果您不添加return,它将默认返回undefined(进入mynum)[见答案]【参考方案2】:

你犯了以下错误:

函数返回值, 分配起点变量, 分配端点变量

function isitanumber(numb)
    while (isNaN(numb) == true)
            numb = parseInt(prompt("Please add a valid number","5"));
        
        return numb;
     


function mytable (thenum, first, second)
    for (var i=first; i<=second; i++)
        var y = thenum*i;
        document.write(thenum + " x " + i + " = " + y + "</br>");
     
    


var mynum = parseInt(prompt("Enter the number you wish to have the table for", "40"));
mynum = isitanumber(mynum);


var startpoint = parseInt(prompt("Enter the startpoint of the table", "1")); 
startpoint = isitanumber(startpoint);

var endpoint = parseInt(prompt("Enter the endpoint of the table", "10"));  
endpoint = isitanumber(endpoint);


mytable(mynum,startpoint,endpoint);

【讨论】:

以上是关于在 Javascript 中制作数字表程序(如 12 x 1 = 12)的问题的主要内容,如果未能解决你的问题,请参考以下文章

我使用 Visual Studio 2017 制作的 UWP JS 应用程序不会打印 JavaScript 生成的数字。这有啥原因或解决方法吗?

Javascript:如何用逗号显示iOs数字键盘

LeetCode 448.找到所有数组中消失的数字 - JavaScript

如何用javascript制作动画

javascript根据数字改变位置

如苹果电话应用程序所示,创建数字键盘的最佳方法