2017-02-15 71 views
0

該程序需要用戶輸入10個溫度,計算平均值,然後打印出高於平均值的臨時溫度。爲什麼我的程序重複相同的結果?

出於某種原因,我沒有看到,我舉三個溫度(100,90,70的順序)的輸入我得到這樣的輸出:

100 is an above average temperature. 

100 is an above average temperature. 

90 is an above average temperature. 

但是,當我給這個輸入(70,90,100順序),我得到

70 is not an above average temperature. 

70 is an above average temperature. 

90 is an above average temperature. 

70 is an above average temperature. 

90 is an above average temperature. 

70 is not an above average temperature. 

java.lang.ArrayIndexOutOfBoundsException: 2 
    at Lab9.main(Lab9.java:64) 

有人可以幫我看看我不是嗎?

import java.util.Scanner; 


public class Lab9 
{ 
    public static int[] temps, aboveAvgTemps; 
    public static int temp, totalTemp, avgTemp, currentTemp, oldTemp, numAboveAvg, 
     numOfEntries; 

    public static void main(String[] args) 
    { 
     System.out.println("Welcome to the above average temperature tester program."); 
     System.out.println("Please in an integer for the number of days you wish to measure."); 

     Scanner kb = new Scanner(System.in); 

     numOfEntries = kb.nextInt(); 

     System.out.println("Please enter in " + numOfEntries + " temperatures."); 

     //initialize main array and variables 
     temps = new int[numOfEntries]; 
     totalTemp = 0; 


     for(int i = 0; i < temps.length; i++) 
     { 
      System.out.println("Please enter in the temperature for day " + (i+1) + ":"); 
      temp = kb.nextInt(); 
      temps[i] = temp; 
      totalTemp += temp; 
     }  

     //final calculations 
     avgTemp = totalTemp/numOfEntries; 
     System.out.println("The average temperature is " + avgTemp); 

     //count up num of above avg temps 
     for(int i = 0; i < temps.length; i++) 
     { 
      if(temps[i] > avgTemp) 
      {    
       numAboveAvg++; 
      } 
     } 

     //initialize new array and variables for above avg temps 
     aboveAvgTemps = new int[numAboveAvg]; 

     for(int i = 0; i < temps.length; i++) 
     { 
      if(temps[i] > avgTemp) 
      {  
       for(int j = 0; j <= i; j++) 
       {     
        aboveAvgTemps[j] = temps[j]; 
        System.out.println(aboveAvgTemps[j] + " is an above average temperature."); 
       } 
      } 
      else 
      { 
       System.out.println(temps[i] + " is not an above average temperature."); 
      } 
     } 
    } 
} 
+0

歡迎來到StackOverflow。你有沒有在調試器中逐行執行代碼,一次一行?這會幫助你更快速地找到問題,而不是在這裏問問題,這是你應該做的。請訪問[幫助]並閱讀[問]以瞭解如何有效地使用本網站。 –

+0

你不應該通過'i'在你的循環內部循環'j'。 – matt

+0

你也應該重新考慮你的數據類型。如果用戶輸入2和3會怎麼樣?這會給你的解決方案平均2,而不是2.5。請參閱http://stackoverflow.com/questions/7220681/division-of-integers-in-java –

回答

0

我不是你想要做的與上面的AVGTemps數組。 這個片段

if(temps[i] > avgTemp) 
      {  
       for(int j = 0; j <= i; j++) 
       {     
        aboveAvgTemps[j] = temps[j]; 
        System.out.println(aboveAvgTemps[j] + " is an above average temperature."); 
       } 
      } 

內部的for循環是造成問題的原因。如果你刪除了for循環並且打印出「xx高於平均溫度」,你將得到想要的結果。

0

我已經改變的代碼的最後塊:

//initialize new array and variables for above avg temps 
     aboveAvgTemps = new int[numAboveAvg]; 

     int index = 0; 
     for(int i = 0; i < temps.length; i++) 
     { 
      if(temps[i] > avgTemp) 
      { 
        aboveAvgTemps[index] = temps[i]; 

        System.out.println(aboveAvgTemps[index] + " is an above average temperature."); 

        index++; 
      } 
      else 
      { 
       System.out.println(temps[i] + " is not an above average temperature."); 
      } 
     } 
0

你的用於與「J」可變環1時高於平均溫度被發現執行用於高達了i次。這會導致多個打印和出界異常。最後一環應該是

for(int i = 0; i < temps.length; i++) 
    { 
     if(temps[i] > avgTemp) 
     { 
      System.out.println(temps[i] + " is an above average temperature."); 
     } 
     else 
     { 
      System.out.println(temps[i] + " is not an above average temperature."); 
     } 
    } 
0

的問題來自於最後一個塊,我已經改變了它這樣的:

int j = 0; 
    for (int i = 0; i < temps.length; i++) { 
     if (temps[i] > avgTemp) { 
      aboveAvgTemps[j] = temps[i]; 
      System.out.println(aboveAvgTemps[j] + " is an above average temperature."); 
      j++; 
     } else { 
      System.out.println(temps[i] + " is not an above average temperature."); 
     } 
    } 
0

這顯然是一項任務。當我在學校學習時,我們首先要做的事情是什麼,什麼是我們成績的50%,是我們解決方案的僞代碼。甚至在此之前,儘管我認爲對於新程序員來說,在他們將手放在鍵盤之前想要解決的問題非常重要。從我所收集的任務是:

  1. 讓用戶輸入一些溫度
  2. 找到平均溫度
  3. 打印出來,對於每個溫度給出的,如果高於或低於平均

你有1和2;您遇到的問題是3.如果您在編碼之前僅指出了您想要做的3的準確性,我認爲一個好的描述是:

對於用戶輸入的每個溫度,打印出「溫度高於平均水平」,如果它是高於平均水平,否則打印出來‘的溫度低於平均水平’

考慮到這一點是很容易的將其轉換成代碼:

for(int i=0; i < i < temps.length; i++) { //for each temperature the user entered 
    if(temps[i] > avgTemp){//if the temperature is above the average 
     //print out the above average message 
     System.out.println(temps[i] + " is an above average temperature."); 

    }else{//otherwise if the temperature is below the average 
     //print out the below average message 
     System.out.println(temps[i] + " is a below average temperature."); 
    } 
} 
0
function myFunction() { 
//array 
var temp = [temp[1], temp[2], temp[3]]; 
//number of elements 
var t_num = temp.length; 
//sum of elements 
var t_sum = [t1, t2, t3].reduce(function(){return a + b;}, 0); 
//avarage of elements 
var t_avrg = t_sum/t_num; 
//alert if > avarage 
for (var i=0; i < t_num; i++){ 
    if (temp[x] > t_avrg){ 
     alert(temp[x]); 
    }; 
}; 
}; 
相關問題