javascript - 将数字插入一个数组,然后将该数组插入另一个数组 - JavaScript

标签 javascript arrays collatz

我正在创建一个程序,它将两个变量作为用户提示。第一个是起始编号,下一个是确定范围的编号。程序然后使用 collat​​z 函数吐出输入的原始数字达到零需要多少步,然后将此信息显示到屏幕上。然后它应该将起始数字增加 1 并重复该过程,直到起始数字达到第二个输入的数字

目前我只对一个号码有效,这是原始起始号码。我不确定如何对 collat​​z 函数进行编码以遍历起始编号(第一个输入)和范围编号(第二个输入)之间的所有数字我的猜测是我需要某种 for 循环并推送值数组(数字达到 0 所需的步骤)作为另一个数组中的自己的数组(它包含程序运行的所有数字的所有步骤)

如果有人能帮忙解决这个问题,我将不胜感激,谢谢

var numArray = [];

function getStartNum(){

   startNum = parseInt(prompt('Please enter a starting number greater than 0.'));

   if(!isPosNum(startNum)){
      alert("error! That is an incorrect value. Please renter an appropriate positive value.");
      getStartNum();
   } else {
    numArray.push(startNum);
    getRangeNum();
   }

}

function getRangeNum(){

   rangeNum = parseInt(prompt('Please enter a range value greater than 0.'));

   if(!isPosNum(rangeNum)){
      alert("error! That is an incorrect value. Please renter an appropriate positive value.");
      getRangeNum();
   } else {
    collatz();
   }

}

function isPosNum( number ) {

    if (isNaN( number )) {
        return false;
    } else if (number < 0) {
        return false;
    } else if (number == 0) {
        return false;
    } else {
        return true;
    }

}



function collatz() {

        //sets x to always be the value of the last element in the array
        x = numArray[numArray.length-1];

        //Sets y to the remainder of x
        y = x % 2;

        //if the value of y of 0, then the number is even and these calculations will be performed
        if (x == 1) {
            console.log('X has reached a value of 1');
            createBar();
        } else if ( y == 0) {
            console.log('Number is even.');
            z = x/2;
            console.log('Value of z is equal to ' + z);
            numArray.push(z);
            console.log(numArray);
            collatz();
        } else if ( y !== 0) {
            //If y is not equal to 0 then it is odd, and these calculations will be performed
            console.log('Number is odd.');
            z = (3 * x) + 1;
            console.log('Value of z is equal to ' + z);
            numArray.push(z);
            console.log(numArray);
            collatz();
        }

}

function maxValueIndex() {



}

function createBar() {

    var steps = numArray.length-1;
    console.log('Number of steps taken to get to 1 is: ' + steps);

    var p = document.createElement("p");
    document.body.appendChild(p); 
    var first = numArray[0]; 
    var output = document.getElementsByTagName("p")[0];
    output.innerHTML = 'Number of steps taken for ' + first + ' to reach 1 is: ' + steps;

    var g = document.createElement("div"); 
    g.id = "graph";
    document.body.appendChild(g); 

    for ( var i=0, n=numArray.length-1; i < n; i++) { 

        var line = document.createElement("p");
        line.className = "line";
        line.innerHTML = "|"; 
        document.body.appendChild(line);


    }

}




getStartNum();

最佳答案

你只需要添加一个在startNum和startNum+rangeNum之间循环的函数。在此迭代中,您可以在 startNum 每次递增时重新启动 numArray,并调用 collat​​z 函数来计算所有步骤。

您可以在以下位置看到您的代码的修改:

https://jsfiddle.net/kqcebswv/

希望对你有帮助

如果您需要生成一个数组数组,您可以这样做:

collatzArray = [];
for (var i = startNum; i <= startNum + rangeNum; i++) {
    collatzArray.push([i]);
}

然后您可以访问每个 numArray 迭代 collat​​zArray:

for (var i = 0; i < collatzArray.length; i++) {
    numArray = collatzArray[i];
    collatz();
}

但我认为这个解决方案更复杂。

关于javascript - 将数字插入一个数组,然后将该数组插入另一个数组 - JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33718712/

相关文章:

javascript - 通过 HTML 标签进行 XPath 搜索

javascript - 当多个元素具有相同的 id 时如何输出错误?

python - 在 python 中处理字节

perl - 试图预测 future 的结果,collat​​z,Perl

python - 如何缩短输出 Collat​​z 猜想链数的函数?

c - main 函数不调用 collat​​zSequencer 函数

javascript - 服务工作人员错误 DOMException : Only secure origins are allowed

javascript - 如果子 div 的数量 > 3,则隐藏其余部分

php - 如何将 php 数组构造为 json

javascript - 在html5中交替存储为javascript数组的多个视频列表