计算java中的平均值

syn*_*oll 4 java for-loop average count

编辑:我写了平均值的代码,但我不知道如何使它,所以它也使用我的args.length而不是数组的int

我需要编写一个可以计算的java程序:1.读入的整数数量2.平均值 - 不必是整数!

注意!我不想计算数组的平均值,而是计算args中的整数.

目前我写的这个:

int count = 0;
    for (int i = 0; i<args.length -1; ++i)
        count++;
    System.out.println(count);

     }

int nums[] = new int[] { 23, 1, 5, 78, 22, 4};
double result = 0; //average will have decimal point
    {
    for(int i=0; i < nums.length; i++){
    result += nums[i];
    }
    System.out.println(result/count)
 }
Run Code Online (Sandbox Code Playgroud)

谁能引导我朝着正确的方向前进?或者举一个例子来指导我以写入方式来塑造这段代码?

提前致谢

Tho*_*mas 6

只需对您的代码进行一些小的修改(为了清晰起见,使用一些var重命名):

double sum = 0; //average will have decimal point

for(int i=0; i < args.length; i++){
   //parse string to double, note that this might fail if you encounter a non-numeric string
   //Note that we could also do Integer.valueOf( args[i] ) but this is more flexible
   sum += Double.valueOf( args[i] ); 
}

double average = sum/args.length;

System.out.println(average );
Run Code Online (Sandbox Code Playgroud)

请注意,循环也可以简化:

for(String arg : args){
   sum += Double.valueOf( arg );
}
Run Code Online (Sandbox Code Playgroud)

编辑:OP似乎想要使用该args数组.这似乎是一个String数组,因此相应地更新了答案.

更新:

正如zoxqoj正确指出的那样,上面的代码中没有处理整数/双溢出.虽然我假设输入值足够小,不会出现这个问题,但这里有一个片段用于非常大的输入值:

BigDecimal sum = BigDecimal.ZERO;
for(String arg : args){
  sum = sum.add( new BigDecimal( arg ) );
}
Run Code Online (Sandbox Code Playgroud)

这种方法有几个优点(尽管速度稍慢,所以不要将它用于时间关键操作):

  • 精度保持不变,双精度会随着数学运算的数量而逐渐松散(或根本不会得到精确的精度)
  • 实际上消除了溢出的可能性.但请注意,a BigDecimal可能大于适合a double或者的long.

  • @MariusŽilėnas你是对的,可能还有一些可能发生的错误,但为了简单起见,在OP的情况下,这些被省略并留给实现者来处理. (2认同)