Javascript 如何让我的while循环工作?
我有一个程序,我在其中编写了三个函数:差分(计算数组之间的数字差)和(求和数组总数)和计算差分(计算差分函数确定下一个数组应该是什么) 所有这些功能都在工作,但我在主程序中使用while循环时遇到了问题,我看不出哪里出了问题Javascript 如何让我的while循环工作?,javascript,arrays,loops,while-loop,Javascript,Arrays,Loops,While Loop,我有一个程序,我在其中编写了三个函数:差分(计算数组之间的数字差)和(求和数组总数)和计算差分(计算差分函数确定下一个数组应该是什么) 所有这些功能都在工作,但我在主程序中使用while循环时遇到了问题,我看不出哪里出了问题 如果有人能给我指出正确的方向,我将不胜感激。程序应该写出初始数组。然后它计算新数组并将其写出(到目前为止是这样做的)。然后,我需要循环它,这样当总和不是0时,程序运行并计算为了达到0,重复这个过程需要多少次。我想我必须将numberArray的值设置回calculate d
如果有人能给我指出正确的方向,我将不胜感激。程序应该写出初始数组。然后它计算新数组并将其写出(到目前为止是这样做的)。然后,我需要循环它,这样当总和不是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变量以指向新数组。你也不必担心先把它清理干净 此外,您正在做错事,但不会导致代码中断:
四件事。首先,某些函数中的额外大括号没有任何作用。与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时,程序可以完成,这就是我用于条件的总和