2015-10-17 77 views
0

我期望得到3.5来自平均方法的结果,但我得到3.0。不知道为什么。我期望Double能给我结果,但是没有。 java.util.ArrayList;如何获得Java中的平均方法以提供正确的输出

public class Hangman { 
    public static void main(String[] args) { 

    ArrayList<Integer> intList = new ArrayList<Integer>(); 

    intList.add(3); 
    intList.add(2); 
    intList.add(7); 
    intList.add(2); 

    System.out.println("The variance number is : "); 
    System.out.println(sum(intList)); 
    System.out.println(intList.size()); 
    System.out.println(average(intList)); 
    } 

    public static int sum(ArrayList<Integer> intList) { 
    int sum = 0; 
    for (int counter = 0; counter < intList.size(); counter++) { 
     sum = sum + intList.get(counter); 
    } 
    return sum; 
    } 

    public static double average(ArrayList<Integer> intList) { 
    double avg = sum(intList)/(intList.size()); 

    return avg; 
    } 

    public static ArrayList<Double> subtract(ArrayList<Integer> intList) { 
    ArrayList<Double> subtracted = new ArrayList<Double>(); 
    for (double subtract : intList) { 
     subtracted.add((double) (subtract - average(intList))); 
    } 
    return subtracted; 
    } 

    public static double variance(ArrayList<Integer> intList) { 
    double sumDiffsSquared = 0.0; 
    double avg = average(intList); 
    for (int value : intList) { 
     double diff = value - avg; 
     diff *= diff; 
     sumDiffsSquared += diff; 
    } 
    return (sumDiffsSquared/(intList.size() - 1)); 
    } 

} 

回答

1

sum需要返回双,否则当你做一个

sum(intList)/(intList.size()); 
average方法

,它截断下来计算为整数的值,然后把该值双形式。

0

你的函数需要返回一个double值。

改变你的方法

public static double sum(ArrayList<Integer> intList) { 
    double sum = 0; 
    for (int counter = 0; counter < intList.size(); counter++) { 
     sum = sum + intList.get(counter); 
    } 
    return sum; 
    } 

,你应该做的罚款。

0

尽管avg的类型是双倍,sum()方法正在返回一个整数值。所以你有一个双从sum()方法

0

double avg =(double)sum(intList)/(intList.size());