我将使用哪些功能来完成我的程序? For-loop还有什么?

时间:2017-01-10 02:48:37

标签: javascript html for-loop while-loop nested-loops

我需要帮助完成这个简单的程序。

程序应该询问用户基数因子数,并且在单击按钮时,程序应显示没有剩余的因子。< / p>

以下是一个例子:

    First Factors Game
        Base Number: ___ (user enters 100)
  Number of Factors: ___ (user enters 3)
     [Display Factors!]  (user clicks button)

         Results:
  The first 3 factors of 100 
       are 1, 2, and 4.

在上面的程序中,显示1,显示2,显示数字3 NOT ,因为(100%3!== 0),显示4。它停在那里因为用户只在因子数中输入了3。

原来如此!这是我的HTML:

<!DOCTYPE html>
<html>
    <head>
        <title>Audition</title>
    </head>
    <body>
        <h3>First Factors</h3>
        <div id="container">
            <label>Base Number: </label>
                <input id="baseNumber" type="text">
                <br>
            <label>Number of Factors: </label>
                <input id="numberOfFactors" type="text">
                <br>
            <button onClick="displayFactors">Display Factors</button>
        </div>
        <div id="results">
            <p>The first <span id="numberOfFactorsResults"></span> factors 
            of <span id="baseNumberResults"></span> are </p>
        </div>
    </body>
</html>

这是我的JavaScript:

function displayFactors() {
    run();
}

function run(){
    var x = parseInt(document.getElementById("baseNumber").value);
    var y = parseInt(document.getElementById("numberOfFactors").value);
    document.getElementById("baseNumberResults") = x;
    document.getElementById("numberOfFactorsResults") = y;

    /** So, we want to take the base number (entered by the user), divide   
        that base number by numbers leading up to the base number, 
        but only print the first such-and-such factors (number provided by 
        the user) with a remainder of 0. **/

这是我难倒的地方。我很确定我需要使用for循环和一些嵌套的switch语句,我知道模数会在某些时候发挥作用,但我不知道从哪里开始。我此时会使用什么循环? (你能解释一下原因吗?)

我不是要求你为我完成该计划(尽管欢迎你)。我要求的只是指导(注意:步骤会很棒!)弄清楚如何解决这个问题。

2 个答案:

答案 0 :(得分:1)

所以我修改了你的HTML,以便输入都是HTML5数字输入,设置它以便结果容器最初是空的,并修复了一些格式。

<!DOCTYPE html>
<html>
    <head>
        <title>Audition</title>
    </head>
    <body>
        <h3>First Factors</h3>
        <div id="container">
            <label>Base Number: </label>
                <input id="baseNumber" type="number">
                <br />
            <label>Number of Factors: </label>
                <input id="numberOfFactors" type="number">
                <br />
            <button onClick="displayFactors();">Display Factors</button>
        </div>
        <div id="results">
        </div>
    </body>
</html>

关于脚本,我将如下:

首先将DOM中的输入和输出元素分配给变量:

var baseNumHldr = document.getElementById("baseNumber");
var numOfFactsHldr = document.getElementById("numberOfFactors");
var resultsHldr = document.getElementById("results");
在click事件中调用的函数中的

解析输入值(为简单起见,我省略了验证和错误处理),然后从函数调用中获取因子,最后显示结果。由于脚本添加了结果,因此不需要span标记,并且将因子作为数组允许join函数输出以逗号分隔的列表。

function displayFactors() {
    var num = parseInt(baseNumHldr.value);
    var cnt = parseInt(numOfFactsHldr.value);
    var factors = getFactors(num, cnt);
    resultsHldr.innerHTML = 
         "<p>The first " + cnt + "factors of " + num + " are " + factors.join() + "</p>";
}

getFactors函数接受两个参数:要分解的数字,num,以及要返回的因子的数量cnt。该函数创建一个数组以返回cnt的长度,防止重复的数组大小调整。除非找到的因子数满足所需的计数,否则for循环将从1运行到数字,这是使用y作为结果数组的索引来实现的。当x的值是输入数的因子时,x将被赋值给数组的y索引,y将递增,并且假设x和y小于输入参数,则循环将重复。

function getFactors(num, cnt){
    var factArray = new Array(cnt);
    for (x = 1, y = 0; (x <= num) && (y < cnt); x++) {
        if (num % x == 0) {
            factArray[y] = x;
            y++;
        }
    }
    return factArray.filter(isDefined);
}

getFactors中的返回数组由以下isDefined函数过滤,以防因果输入计数超过允许在显示输出时进行简单连接的实际因子数

function isDefined(val) {
    return val !== undefined;
}

也不要忘记引用或包含带有html的脚本

答案 1 :(得分:0)

我想你会在1开始循环。然后,如果任何给定的数字不是一个因子(如果它有一个余数),你想保持循环,但不要增加循环变量。

我认为这是其中最值得注意的部分 - 通常,当人们使用for循环时,会有一个变量在循环的每次迭代中递增,但是你还需要另一个变量你找到一个因素(或当你达到这个数字时,因为当然没有任何因素可以成为它的一个因素。)

var factors_found = 0;
for (var i=1; i<number; i++) {
    if (remainder == 0) {
        factors_found++;
        if (factors_found >= 3) {
            break;
        }
    }
}

在这种情况下,当你找到数字时,或者你找到3个因子时,循环将退出。以先到者为准。

当然,您希望将这些因素存储在某个地方。如果您使用数组,则只需检查该数组的长度即可查看到目前为止已找到的数组。