仍然掌握着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.任何想法为什么?谢谢。
答案 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);