我刚刚开始学习代码学院的编码,我对此非常陌生。
我正在尝试让这个程序向用户询问它添加到数组中的值,从中计算样本标准偏差。
// This array stores the values needed
var figures;
getStandardDeviation = function() {
// I need at least two figures for a standard deviation
figures[0] = prompt("Enter a number:");
figures[1] = prompt("Enter a number:");
// Checks whether user wishes to add more values to the array
var confirm = prompt("Would you like to add another? (Y or N)").toUpperCase();
// I can't figure out why the following if statement is not executed
// It checks whether the user wishes to add more values and adds them to the array
// If not it breaks the for loop
if (confirm === "Y"){
for ( i = 0; i === 100; i++){
figures[i + 2] = prompt("Enter a number:");
confirm = prompt("Would you like to add another figure? (Y or N)").toUpperCase();
if (confirm === "N"){
break;
}
}
}
// The rest of the code works fine from here onwards
var sumx = 0;
var n = figures.length;
for(var i = 0 ; i < n ; i++) {
sumx += figures[i];
}
console.log("Sum = " + sumx);
var sumXsq = 0;
for( i = 0 ; i < n ; i++) {
sumXsq += (figures[i] * figures[i]);
}
console.log("Sum x squared = " + sumXsq);
var sxx = (sumXsq - (sumx * sumx)/n);
console.log("Sxx = " + sxx);
var v = sxx/(n - 1);
console.log("Variance = " + v);
var standardDev = Math.sqrt(v);
console.log("Standard Deviation = " + standardDev);
};
getStandardDeviation();
该程序应该问我是否要为数组添加更多值,然后当我确认时,它会提示我添加更多值。
目前,当我执行程序时,我输入数字56和67.代码然后询问我是否要添加更多值,然后我确认这一点。它不是让我添加更多的值而是忽略它,而是用前两个值(56和67)计算标准偏差。
The output is:
Sum = 05667
Sum x squared = 7625
Sxx = -16049819.5
Variance = -16049819.5
Standard Deviation = NaN
答案 0 :(得分:1)
您的figures
变量未定义为数组。因为figure[1] = prompt(...)
永远不会被命中,并且var n = figures.length;
上会引发TypeError。
变化:
var figures;
要:
var figures = [];
然后,您可以使用递归函数替换for
之后使用的if (confirm === "Y")
循环:
// Push a user input number into the figures array
figures.push(prompt("Enter a number:"));
// Function to add a new number and ask if we want to add more
function addNewNumber() {
// Push a new user input number into the figures array
figures.push(prompt("Enter a number:"));
// Ask if the user wants to add another number
if (confirm("Do you want to add another number?"))
// If they do, call this function again
addNewNumber();
}
// Trigger the function for the first time
addNewNumber();
答案 1 :(得分:1)
for ( i = 0; i === 100; i++){[...]}
表示
i
设为0 i === 100
(即{如果i
不是100),则结束循环i++
由于i
的初始值为0而不是100,因此循环内的代码永远不会执行。如果你希望它从0到99,它应该是for ( i = 0; i < 100; i++)
。
但实际上并不需要for循环。一个while循环会更好。像while (true){[...]}
这样的循环会一直运行,直到达到break
语句。由于在这种情况下您不会使用i
,因此您可以使用figures.push(parseFloat(prompt("Enter a number:")))
代替parseFloat
,根据Vincent Hogendoorn所说的内容。 push
在数组的末尾添加一个新值,因此它正是您所需要的。类似的东西:
if (confirm === "Y"){
while (true){
figures.push(parseFloat(prompt("Enter a number:")));
confirm = prompt("Would you like to add another figure? (Y or N)").toUpperCase();
if (confirm === "N"){
break;
}
}
}
您也可以更改它,以便在您没有至少两个值时不询问是否要停止。这样你就可以省略第一部分:
figures[0] = prompt("Enter a number:");
figures[1] = prompt("Enter a number:");
答案 2 :(得分:1)
确实你的figures
变量没有定义为数组,就像@James Donnely所说的那样。
请记住,您还要填写字符串,因此如果要添加值,则必须将它们转换为值。
您可以使用类似parseFloat
的内容。
如果你不使用它,你总结字符串。 3 + 4将是34而不是7.
答案 3 :(得分:0)
function StandardDeviation(numbersArr) {
//--CALCULATE AVAREGE--
var total = 0;
for(var key in numbersArr)
total += numbersArr[key];
var meanVal = total / numbersArr.length;
//--CALCULATE AVAREGE--
//--CALCULATE STANDARD DEVIATION--
var SDprep = 0;
for(var key in numbersArr)
SDprep += Math.pow((parseFloat(numbersArr[key]) - meanVal),2);
var SDresult = Math.sqrt(SDprep/numbersArr.length);
//--CALCULATE STANDARD DEVIATION--
alert(SDresult);
}
var numbersArr = [10, 11, 12, 13, 14];
StandardDeviation(numbersArr);
&#13;