Javascript 计算不执行循环的标准偏差
我刚刚开始在代码学院学习编码,我对这方面还很陌生 我试图让这个程序向用户询问它添加到一个数组中的值,从中计算样本标准偏差Javascript 计算不执行循环的标准偏差,javascript,Javascript,我刚刚开始在代码学院学习编码,我对这方面还很陌生 我试图让这个程序向用户询问它添加到一个数组中的值,从中计算样本标准偏差 // 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:"); fig
// 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();
您的
数字
变量未定义为数组。因此,figure[1]=prompt(…)
永远不会被命中,并且在var n=figures.length上抛出一个TypeError代码>
更改:
var figures;
致:
然后,您可以使用递归函数替换在if(confirm==“Y”)
之后使用的for
循环:
// 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();
.对于(i=0;i==100;i++){[…]}
的意思是
将i
设置为0
如果i===100
不是真的(即:如果i
不是100),则结束循环
做我放在{}括号里的任何事,一次
Doi++
回到2
由于i
的初始值为0而不是100,因此循环中的代码永远不会执行。如果您希望它从0变为99,那么它应该是for(i=0;i<100;i++)
不过,实际上并不需要for循环。一段时间的循环会更好。像while(true){[…]}
这样的循环将一直运行,直到遇到break
语句为止。在这种情况下,您不会使用i
,因此可以使用figures.push(parseFloat(提示符(“输入一个数字”))
(您应该使用parseFloat
,如前所述)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:");
实际上,您的
figures
变量并不像@James Donnely所说的那样定义为数组。
请记住,您还需要填写字符串,因此,如果您要添加值,必须将它们转换为值
为此,您可以使用类似于parseFloat
的方法
如果不使用它,则对字符串求和。3+4将是34而不是7
功能标准偏差(numbersArr){
//--计算AVAREGE--
var合计=0;
for(var键在numbersArr中)
总数+=数字助理[键];
var meanVal=总长度/numbersArr.length;
//--计算AVAREGE--
//--计算标准差--
var-SDprep=0;
for(var键在numbersArr中)
SDprep+=Math.pow((parseFloat(numbersArr[key])-meanVal),2);
var SDresult=Math.sqrt(SDprep/numbersArr.length);
//--计算标准差--
警报(SDresult);
}
var numbersArr=[10,11,12,13,14];
标准偏差(numbersArr)代码>“不工作”不是一个很有用的描述。请给出输入、输出和预期输出的示例。当询问用户是或否问题时,您可以使用confirm()
而不是prompt()
。请看我的回答,“并且在var n=figures.length上抛出一个TypeError;”代码在这之前失败了,这行代码不会被执行来抛出错误。
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:");