2014-12-01 69 views
3

仍然在与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。任何想法为什么?谢谢。

回答

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[],你可以完全避开这个问题。

+0

我还没有越过'ArrayList'然而,有无论如何摆脱未使用的插槽吗? – ph0bolus 2014-12-01 16:44:29

+1

如果您还不应该使用List API,请声明您的数组“足够大”,并将其视为您必须管理的一块已分配内存。在您的评论中声明这是一个依赖项。然后,跟踪您单独收集的值的数量,而不是使用length属性。 – jdv 2014-12-01 16:47:30

+0

@jdv谢谢,我创建了另一个变量'iCount'来做到这一点。 – ph0bolus 2014-12-01 20:44:00

0

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

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); 
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);