为什么我的数组的平均值不正确?

时间:2014-12-01 16:32:25

标签: java arrays

仍然掌握着java,直到现在我还没有任何打嗝就完成了我的任务。当我计算我的数组内的值的平均值时,我得到一个不正确的答案。这是获取值的代码:

public static int [] inputGrades()
    {
        Scanner kb = new Scanner (System.in);
        int [] iGrades = new int [10];
        System.out.print("\nInput test scores, enter -1 when you're finished.\n");
        for (int i =0; i<iGrades.length;i++)
        {
            iGrades[i]=kb.nextInt();
            if (iGrades[i] ==-1)
            {
                break;
            }
    }
        return iGrades;   

然后这是我的阵列的平均方法:

public static double averageArray (int [] array, int numElements)
    {   
        int iSum= 0;
        double dAverage;
        for (int i=0; i<array.length; i++)
        {
            if (array[i]>0)
            {
                iSum = iSum + array[i];  
            }    

        }
        dAverage = iSum / array.length;
        System.out.print (dAverage);
        return dAverage;

如果我要输入说10,20,30,40,50,-1。我得到的平均值的输出是15而不是30.任何想法为什么?谢谢。

4 个答案:

答案 0 :(得分:6)

有两个问题在起作用:

(1)这是整数(即截断)除法:

dAverage = iSum / array.length;

你想要

dAverage = iSum / (double)array.length`;

(2)array.length始终为10,并且在数组末尾包含零。因此,在您的示例中,您实际上计算的是10,20,30,40,50,0,0,0,0,0的平均值,实际上是15。

您需要记录用户实际输入的数量,并将其除以。

更好的是,使用ArrayList<Integer>代替int[],您可以完全回避这个问题。

答案 1 :(得分:0)

查看array.length。它是10,所以dAverage = iSum / array.length总是除以10。

答案 2 :(得分:0)

您好,这里是不使用数组的解决方案,之后我将使用ArraysList发布解决方案,以便您了解它是如何工作的:)。我希望它可以帮到你

    int total = 0;
    int numberOfPeople = 0;
    int number;

    Scanner input = new Scanner(System.in);
    ArrayList<Integer> myList = new ArrayList<Integer>(5);

    System.out.println("Enter a number or -1 to finish");
    number = input.nextInt();
    while (number !=-1) {

        total = total + number;
        numberOfPeople++;
        System.out.println("Enter a number or -1 to finish");
        number = input.nextInt();

    }

    System.out.println("The average is: " + total / numberOfPeople);

答案 3 :(得分:0)

这是我使用ArrayList的另一个解决方案。希望它可以帮助你:))

    int number = 0;
    int  total = 0;
    int numberOfPeople = 0;
    ArrayList<Integer> myList = new ArrayList<Integer>(5);
    Scanner input = new Scanner(System.in);

    System.out.println("Enter a number or -1 to finish");
    number = input.nextInt();
       while (number !=-1 ) {

        total = total + number;
        numberOfPeople++;
        if(numberOfPeople == 5){
            break;
        }

        System.out.println("Enter a number or -1 to finish");
        number = input.nextInt();
        myList.add(number);

    }
       System.out.println("The average is: "+ total/numberOfPeople);