2015-07-20 81 views
0

我有这个问题要解决。这听起来可能很简单,但我是一个初学者。 这里是我的代码到目前为止,但只有一个窗口,当我运行它时出现。 谢谢您的建议和帮助javascript数组输入用户和平均值计算

var years= prompt("Enter the number of years: "); // Number of years 
var rainFall = new ArrayList(); 

while (years < 1) { 

    alert("Invalid. Enter 1 or greater: "); 
    years =prompt("Enter a year: "); 
} 

for (var y = 1; y <= years; y++) { 

    for (var m = 1; m <= NUM_MONTHS; m++) { 

     alert("Year " + y + " month " + m + ": "); 
     monthRain = prompt("enter rainfall for a month "); 
     rainfall.add(monthRain); 
    } 
} 

alert("\nNumber of months: " + (years * NUM_MONTHS) + "Total rainfall: " + calculateTotalRainFall(rainFall) + " inches" + "Average monthly rainfall: " + calculateAverageRainFall(rainFall) + " inches"); 
+0

嗨,尝试更改rainfall.add(monthRain); rain.push(monthRain); –

回答

1

Array.prototype.sum = function() { 
 
     var total = 0; 
 
     for(var i in this) { 
 
     var i = parseFloat(this[i]); 
 
     if(i>=0) { 
 
      total += i; 
 
     } 
 
     } 
 
     return total; 
 
    }; 
 

 
    Array.prototype.avg = function() { 
 
     var avg = (this.length>0)? parseFloat(this.sum()/this.length) : 0; 
 
     avg = parseFloat(parseInt(avg*100)/100); 
 
     return avg; 
 
    }; 
 

 
    var years = parseInt(prompt("Enter the number of years: ")); // Number of years 
 

 
    var rainFall = []; 
 

 
    while (years < 1) { 
 
     alert("Invalid. Enter 1 or greater: "); 
 
     years = parseInt(prompt("Enter a year: ")); 
 
    } 
 

 
    var NUM_MONTHS = 12; 
 
    for (var y = 1; y <= years; y++) { 
 
     for (var m = 1; m <= NUM_MONTHS; m++) { 
 
     alert("Year " + y + " month " + m + ": "); 
 

 
     var monthRain = parseFloat(prompt("enter rainfall for a month ")); 
 
     if(monthRain>=0) { 
 
      rainFall.push(monthRain); 
 
     } 
 
     } 
 
    } 
 

 
if(years<1) years = 0; 
 
alert("\nNumber of months: " + (years * NUM_MONTHS) + " Total rainfall: " + rainFall.sum() + " inches" + " Average monthly rainfall: " + rainFall.avg() + " inches");

OR:

function sumArray (items) { 
 
     var total = 0; 
 
     for(var i in items) { 
 
     var i = parseFloat(items[i]); 
 
     if(i>=0) { 
 
      total += i; 
 
     } 
 
     } 
 
     return total; 
 
    }; 
 

 
    function avgArray(items) { 
 
     var sum = sumArray(items); 
 
     var avg = (items.length>0)? parseFloat(sum/items.length) : 0; 
 
     avg = parseFloat(parseInt(avg*100)/100); 
 
     return avg; 
 
    }; 
 

 
    var years = parseInt(prompt("Enter the number of years: ")); // Number of years 
 

 
    var rainFall = []; 
 

 
    while (years < 1) { 
 
     alert("Invalid. Enter 1 or greater: "); 
 
     years = parseInt(prompt("Enter a year: ")); 
 
    } 
 

 
    var NUM_MONTHS = 12; 
 
    for (var y = 1; y <= years; y++) { 
 
     for (var m = 1; m <= NUM_MONTHS; m++) { 
 
     alert("Year " + y + " month " + m + ": "); 
 

 
     var monthRain = parseFloat(prompt("enter rainfall for a month ")); 
 
     if(monthRain>=0) { 
 
      rainFall.push(monthRain); 
 
     } 
 
     } 
 
    } 
 

 
if(years<1) years = 0; 
 
alert("\nNumber of months: " + (years * NUM_MONTHS) + " Total rainfall: " + sumArray(rainFall) + " inches" + " Average monthly rainfall: " + avgArray(rainFall) + " inches");

+0

谢谢你的回答,但它远不是我在课堂上学到的东西,现在我不应该使用功能。只是基本的伪代码 – user5134938

+0

更新了我的答案(: – num8er

+0

对不起,我的意思是不使用函数,但我保留你的答案,为我的下一部作品。非常感谢您的时间 – user5134938

0

尝试更改rainfall.add(monthRain); rain.push(monthRain);

0

它看起来像你的核心错误是使用Java的ArrayList的类,什么时候应该已经使用JavaScript的数组类。请记住,Java和JavaScript不相关(名字很混乱,是的)。

如果更改new ArrayList()new Array(),并rainfall.addrainFall.push(注意大小写变化为好),然后它似乎工作。

如果您有权访问JavaScript控制台检查器(例如,通过ctrl-shift-J在Chrome中访问),则可以查找代码中发生的JS错误,例如ArrayList couldn找不到。

已在下面修正。我还添加了缺少的NUM_MONTHS常量(我假设你有其他地方)。

var NUM_MONTHS = 12; 
var years= prompt("Enter the number of years: "); // Number of years 

// CHANGE: use "Array", not "ArrayList". You could also use "var rainFall = [];", which I find 
var rainFall = new Array(); 

while (years < 1) { 

    alert("Invalid. Enter 1 or greater: "); 
    years =prompt("Enter a year: "); 
} 

for (var y = 1; y <= years; y++) { 

    for (var m = 1; m <= NUM_MONTHS; m++) { 

     alert("Year " + y + " month " + m + ": "); 
     monthRain = prompt("enter rainfall for a month "); 
     // CHANGE: use "push()" method of Array, and use camelCase for variable name consistency 
     rainFall.push(monthRain); 
    } 
} 

alert("\nNumber of months: " + (years * NUM_MONTHS) + "Total rainfall: " + calculateTotalRainFall(rainFall) + " inches" + "Average monthly rainfall: " + calculateAverageRainFall(rainFall) + " inches");