我试图编写一个程序,询问整数数组的大小,数组的值,然后找出正整数的平均值并打印出来。当我运行它时,我有时会得到错误的结果。我还没有确定错误的结果取决于什么,但是例如,如果我输入以下输入:"数组大小:4,数组值:1,2,-5,5和#34;我平均得到" 2.0"
这是我的代码:
import java.util.Scanner;
public class Mitra {
private static Scanner user_input;
double avg (int[] arr, int size)
{
int sum = 0;
int numbers = 0;
for (int i=0; i<size;i++)
{
if (arr[i]>0)
{
sum = sum+arr[i];
numbers++;
}
else{
continue;
}
}
double average = sum/numbers;
return average;
}
public static void main(String[] args) {
user_input = new Scanner (System.in);
System.out.println("enter array length");
int alength = user_input.nextInt();
int[] array_1 = new int[alength];
for (int i=0; i<alength;i++)
{
System.out.println("Enter array value "+i);
array_1[i] = user_input.nextInt();
}
Mitra obj = new Mitra();
double result = obj.avg(array_1, alength);
System.out.println("The average of the positive numbers of the array is "+result);
}
}
答案 0 :(得分:2)
更改
double average = sum/numbers;
到
double average = (double)sum/numbers;
强制浮点除法。
否则,int division(在划分int类型的两个变量时发生的操作)将在划分8/3时给出2(如在示例中那样)。
答案 1 :(得分:0)
当你评估sum/numbers
时,它将结果存储在一个临时变量中(并且小数部分已被截断),然后在左侧分配它。你需要使用(Double)这样对它进行类型化:< / p>
double average = (double)sum/numbers;