2017-04-03 88 views
0

對於我的web開發類查找在陣列中的最低/最高數目,我有以下分配:使用循環

之前,你的老闆能夠在辦公套件可調恆溫器,他必須確信,主要的溫度變化在不同的日子裏出現在不同的官員和每個辦公室內。你寫一個程序,讓每個員工中午在每五天進入溫度並顯示最高,最低和平均(均值)的溫度。使用For循環來讀取五個讀數。 (提示:初始化的最高和最低溫度變量是讀過的第一溫度,然後比較其他溫度,看他們是否是更低或更高)。使用parseFloat()方法的溫度輸入轉換爲十進制數並將平均值顯示爲小數點後一位。

我怎樣才能找到平均溫度是多少?

<!DOCTYPE HTML> 
<html> 
<body> 
    <script type="text/javascript"> 
    var high; // highest temperature 
    var low; // lowest temperature 
    var avg; // average temperature 

    var temperatures = []; 

    for (var i = 0; i < 5; i++) { 
     high = temperatures[0]; 
     low = temperatures[0]; 

     temperatures.push(parseFloat(prompt("Enter the temperature for day " + (i+1)))); 

     if (high < temperatures[i]) { 
      high = temperatures[i]; } 
     if (low > temperatures[i]) { 
      low = temperatures[i]; } 

    } 

    document.write("The highest temperature is " + high + ".<br>"); 
    document.write("The lowest temperature was " + low + ".<br>"); 
    document.write("The average temperature was " + avg + "."); 
    </script> 
</body> 
</html> 
+3

幾點讓你開始。 1)問題陳述'使用For循環取5個讀數',但你使用單獨的變量。這可以通過循環來實現。你知不知道怎麼? 2)你用'high'和'low'覆蓋'alltemp'中的'temp1',兩者都是'undefined'。而你想做相反的事情。將'high'和'low'設置爲'alltemp [0]'。 – fubar

+0

@farar感謝您的幫助!我能夠讓環路返回正確的高溫和低溫。但是,我不知道如何擺脫temp1,temp2,temp3等變量,並仍然能夠工作。 – Emily

+0

看看我在下面發佈的答案。這不是一個完整的解決方案,但它會讓你開始。然後,如果您使用更新的代碼編輯您的問題,我可以嘗試進一步提供幫助。 – fubar

回答

0

步驟1

@Emily,這裏的東西讓你開始使用for循環來收集用戶輸入。

var temperatures = []; 

for (var i = 1; i <= 5; i++) { 
    var temperature = prompt('Enter temperature for day ' + i); 
    // Parse input and add it to the temperatures array 
} 

步驟2

真棒,所以你現在有5個溫度稱爲temperatures的陣列。在下面的例子中,我已經分割線來捕獲並將值推入兩個單獨的語句以提高可讀性。具體如下:

var temperature = prompt('Enter the temperature for day ' + (i + 1)); 
temperatures.push(parseFloat(temperature)); 

,你需要做的另一個小的改動是,你的循環內分配highlow值,但在此之前的任何值已被推到temperatures數組,所以我們需要看那個。

但首先,求出平均溫度。如你所知,平均值是所有值的總和除以值的數量。在我們循環的每次迭代中,我們都會得到下一個溫度值。所以我們可以使用循環將所有這些值一起添加。具體如下:

var temperatures = []; 
var total = 0; 
var high; 
var low; 
var avg; 

for (var i = 0; i < 5; i++) { 
    // Capture, parse and append temperature to temperatures array 
    var temperature = prompt('Enter the temperature for day ' + (i + 1)); 
    temperatures.push(parseFloat(temperature)); 

    // Increment total by new temperature value 
    total += temperature; 
} 

但對於highlow溫度?如果我們把代碼從您的最新問題的更新,環路上的每一次迭代,highlow將重置爲第一溫度,然後你就會把它比作在迴路中的當前溫度。這不起作用。

但是,我們可以做的是將highlow設置爲非常低和非常高的值,以便用戶輸入的任何溫度總是更高或更低。例如:

var high = Number.NEGATIVE_INFINITY; 
var low = Number.POSITIVE_INFINITY; 

然後在循環的每次迭代中,我們將帶您已經寫入當前的溫度與上一個highlow值的代碼。如下:

var temperatures = []; 
var total = 0; 
var high = Number.NEGATIVE_INFINITY; 
var low = Number.POSITIVE_INFINITY; 
var avg; 

for (var i = 0; i < 5; i++) { 
    // Capture, parse and append temperature to temperatures array 
    var temperature = prompt('Enter the temperature for day ' + (i + 1)); 
    temperatures.push(parseFloat(temperature)); 

    // Increment total by new temperature value 
    total += temperature; 

    // Compare high and low temperatures 
    if (high < temperature) high = temperature; 
    if (low > temperature) low = temperature; 
} 

最後,你如何計算平均值?

// Calculate average temperature 
avg = total/temperatures.length; 

步驟3

如果你有興趣這個代碼可以進一步改進。但這可能超出了這個問題的範圍。

如果您想改進它,請參閱Math.min(),Math.max()apply()。我很高興發佈一些更多的代碼來展示如何使用這些來獲取高溫和低溫,以及用於計算平均值的Array.prototype.reduce

0

您正在將alltemp中的值設置爲高或低,而不是其他方式。下面是顯示你如何做到這一點小提琴(因爲你必須使用一個for循環,但也有更簡潔的方式):https://jsfiddle.net/vtbahu3v/

var nums = [2, 55, 3, 87, 4, 23], 
    high = low = nums[0]; 

for(var i = 0; i < nums.length; i++) { 
    high = Math.max(high, nums[i]); 
    low = Math.min(low, nums[i]); 
} 

alert("High is " + high); 
alert("Low is " + low); 
+0

**危險危險將robinson **'low'在全球範圍內定義。小心你正在使用的捷徑! –

+0

這是個好主意!補充這些捷徑 – jas7457