簡體   English   中英

如何找到列表java的平均值

[英]how to find average of a List java

我對如何找到列表的平均值有疑問。 我不知道我的代碼有什么問題,因為我對所有三個平均值進行了相同的操作,但是只有第一個平均值有效,其他平均值僅顯示0 ,如下所示:

Average:                                  58                                  0                                  0

下面是我的代碼:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Hurricanes2{

public static void main(String args[]) throws FileNotFoundException{

    Scanner scan = new Scanner(new FileReader(new File("/Users/timothylee/hurcdata2.txt")));
    List<Integer> year = new ArrayList<Integer>();
    List<Integer> windspeed = new ArrayList<Integer>();
    List<Integer> pressure = new ArrayList<Integer>();
    List<String> name = new ArrayList<String>();
    List<Integer> category = new ArrayList<Integer>();

     while(scan.hasNext()){
         String input = scan.nextLine();
         String[] hurricane = input.split("\\s+");
         year.add(Integer.parseInt(hurricane[0]));
         windspeed.add(Integer.parseInt(hurricane[2]));
         pressure.add(Integer.parseInt(hurricane[3]));
         name.add(hurricane[4].trim());
         category.add(Integer.parseInt(hurricane[5]));
     }

     int sum = 0;
     for(Integer integer : pressure){
         sum += integer.intValue();
     }

     double average = sum / pressure.size();

     // create menu
     System.out.printf("%50s%n%n", "Hurricanes 1980 - 2006");
     System.out.printf("%1s%20s%20s%20s%20s%n", "Year", "Hurricane", 
             "Category", "Pressure(mb)", "Wind Speed (mph)");
     System.out.println("__________________________________________________"
             + "__________________________________");
     for(int i = 0; i < year.size(); i++){
         System.out.printf("%4d%20s%20d%20d%20d%n", year.get(i), name.get(i)
                 , category.get(i), pressure.get(i), windspeed.get(i));
     }
     System.out.println("__________________________________________________"
             + "__________________________________");
     int averageCategory = 0;
     int averagePressure = 0;
     int averageWindSpeed = 0;
     for(int i = 0; i < category.size(); i++){
         averageCategory = i / category.get(i);
         averagePressure = i / pressure.get(i);
         averageWindSpeed = i / windspeed.get(i);
     }
     System.out.printf("%1s%35d%35d%35d%n", "Average: ", averageCategory, 
             averagePressure, averageWindSpeed);
}
}

我怎樣才能解決這個問題? 任何幫助將不勝感激。

我看不到您的輸入,但是....

我不認為您的for循環正在做您想要的事情。 每次迭代,都會用等號右側的內容完全覆蓋averageCategory,averagePressure,averageWindspeed中的內容。

這就是你的意思嗎? 通常,在計算平均值時,我們求和,然后除以項目總數一次。

您在這里做錯了:

 double average = sum / pressure.size();

這樣你在做整除,計算平均值時,expecially如果值接近1,則需要投它這是不好的:

 double average = (double)sum / (double)pressure.size();

你也需要在這里投:

for(int i = 0; i < category.size(); i++){
         averageCategory = (int) ((double)i / (double)category.get(i));
         averagePressure =(int) ((double) i / (double)pressure.get(i));
         averageWindSpeed = (int) ((double)i / (double)windspeed.get(i));
     }

而且,這最后一段代碼似乎沒有計算任何平均值。 您應該計算總和並將其除以數據大小。 但記得要投整數除法,因為我出一倍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM