Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.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 如何让我的while循环工作?_Javascript_Arrays_Loops_While Loop - Fatal编程技术网

Javascript 如何让我的while循环工作?

Javascript 如何让我的while循环工作?,javascript,arrays,loops,while-loop,Javascript,Arrays,Loops,While Loop,我有一个程序,我在其中编写了三个函数:差分(计算数组之间的数字差)和(求和数组总数)和计算差分(计算差分函数确定下一个数组应该是什么) 所有这些功能都在工作,但我在主程序中使用while循环时遇到了问题,我看不出哪里出了问题 如果有人能给我指出正确的方向,我将不胜感激。程序应该写出初始数组。然后它计算新数组并将其写出(到目前为止是这样做的)。然后,我需要循环它,这样当总和不是0时,程序运行并计算为了达到0,重复这个过程需要多少次。我想我必须将numberArray的值设置回calculate d

我有一个程序,我在其中编写了三个函数:差分(计算数组之间的数字差)和(求和数组总数)和计算差分(计算差分函数确定下一个数组应该是什么)

所有这些功能都在工作,但我在主程序中使用while循环时遇到了问题,我看不出哪里出了问题


如果有人能给我指出正确的方向,我将不胜感激。程序应该写出初始数组。然后它计算新数组并将其写出(到目前为止是这样做的)。然后,我需要循环它,这样当总和不是0时,程序运行并计算为了达到0,重复这个过程需要多少次。我想我必须将numberArray的值设置回calculate difference中的新数字,然后清除calculate difference数组。我已经在这方面工作了好几天了,但我还没有找到我需要做的事情。我不希望人们给我答案,因为这是我的课程,但我想一些指导,我会错在哪里

function difference(firstNumber, secondNumber)
{
    if (firstNumber > secondNumber)
    {
        return (firstNumber - secondNumber);
    }    
    else
    {   
        return (secondNumber - firstNumber);
    }    

}

function sum(numberArray)
{
    numberTotal = 0
    for (var total = 0; total < numberArray.length; total = total + 1)
    {
        numberTotal = numberTotal + numberArray[total]
    }
        {
            return numberTotal
        }

}
function calculateDifferences()
{
    var createArray = new Array(numberArray.length); 
    for (var c = 0; c < numberArray.length - 1 ; c = c + 1) 
    {
    createArray[c] = difference(numberArray[c],numberArray[c+1]); 
    }
        {
            createArray[numberArray.length - 1] = difference(numberArray[0],numberArray[numberArray.length - 1]);
        }  
            {        
                return createArray; 
            }
}

var numberArray = [16,14,4,5];//initial numbers to start with
document.write(numberArray +'<BR>');//writes out initial numbers
sum(numberArray);// checks to see if sum total = 0
var count = 0;// delcares the counter to 0

while(sum(numberArray) > 0)// runs the programme while sum is not 0
{
    count = count + 1;// counts how many times looped

    calculateDifferences(numberArray);//calculates the new numbers from numberArray

    document.write (calculateDifferences() + '<BR>');//writes out new numbers

    calculateDifferences = numberArray;// sets the numberArray to new figures

    calculateDifferences() = 0;//clears array for next calculate

    sum (numberArray);//checks the condition again

}

document.write ( 'interations taken = ' + count + '<BR>');//if sum 0 then programme  finishes by writing out how many times it took to get to 0
函数差异(第一个数字,第二个数字)
{
如果(第一个编号>第二个编号)
{
返回(firstNumber-secondNumber);
}    
其他的
{   
返回(第二个编号-第一个编号);
}    
}
函数和(numberArray)
{
numberTotal=0
对于(var total=0;total”)//写出最初的数字
总和(numberArray);//检查总和是否为0
变量计数=0;//将计数器设置为0
while(sum(numberraray)>0)//在sum不是0时运行程序
{
count=count+1;//计算循环次数
calculateDifferences(numberArray);//从numberArray计算新的数字
document.write(calculateDifferences()+'
');//写出新的数字 calculateDifferences=numberArray;//将numberArray设置为新数字 calculateDifferences()=0;//为下一次计算清除数组 sum(numberraray);//再次检查条件 } document.write('interactions take='+count+'
')//若总和为0,则程序将通过写出达到0所需的次数来完成
在循环的第三行中,您再次调用CalculateDifferences(),而不传入参数。也许在第二行,将calculateDifferences(numberArray)返回的值保存到一个变量中,然后写出该变量


编辑:另外,您不能通过将数组设置为0来清除数组。您的问题是:

calculateDifferences = numberArray;// sets the numberArray to new figures
calculateDifferences() = 0;//clears array for next calculate
他们没有道理。
第一个调用尝试将函数设置为与数组相等?
第二个调用将函数设置为0

您可以使用函数执行计算并返回值,但不应将函数设置为等于某个值

您要做的是调用CalculationDifferences一次并将其输出存储在变量中。之后,您可以重新分配numberArray变量以指向新数组。你也不必担心先把它清理干净

此外,您正在做错事,但不会导致代码中断:

  • 您的calculateDifferences不需要任何参数。所以你不需要通过考试,雷
  • 循环结束时不需要sum(numberraray)调用,循环条件每次都会检查它。特别是你不需要它,因为你没有用它的返回值做任何事情

  • 四件事。首先,某些函数中的额外大括号没有任何作用。与C不同,javascript没有大括号作用域,只有函数作用域。在我看来,删除它们会使代码更具可读性

    其次,差分函数实际上应该是
    Math.abs(firstNumber-secondNumber)
    。它不仅更短,而且可读性更强

    第三,您的目标总体结构如下:

    while( checkSomeCondition(myArray) ) {
        myArray = doSomethingWith(myArray);
    }
    
    不用担心释放阵列的旧数据。当不再有任何内容引用它时,它将自动被垃圾收集


    第四,我个人会修改
    calculateDifferences
    函数,将数组作为参数,而不是将数组作为全局变量传递。

    createArray[numberArray.length-1]=difference(numberArray[0],numberArray[numberArray.length-1]);我想这就是问题所在


    尝试createArray[3]=差异(numberArray[0],numberArray[3])

    你打算做两次sum(numberArray)吗(1在结尾,1在条件中暂时)?你能发布你的CalculatedDifferences函数吗?只是为了澄清。做
    sum(numberArray)有效果吗?你肯定不会在任何地方影响结果。另外,在HTML前端,您应该使用

    而不是

    。我想我必须在最后再做一次求和。这是否意味着当循环完成时,它将返回到程序顶部的sum(numberraray)?我将在这里为您发布我的函数。Michael sum(numberraray)将numberray中的总数相加。我知道,当sum=0时,程序可以完成,这就是我用于条件的总和