在java中计算平均值

新手上路,请多包涵

编辑:我已经为平均值编写了代码,但我不知道如何使它也使用 int 来自我的 args.length 而不是数组。

我需要编写一个可以计算的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)

谁能指导我正确的方向?或者举一个例子来指导我以正确的方式来塑造这段代码?

提前致谢。

原文由 syncoroll 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 614
2 个回答

只需对您的代码进行一些小的修改即可(为清楚起见,对 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 );

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

 for(String arg : args){
   sum += Double.valueOf( arg );
}

编辑:OP 似乎想使用 args 数组。这似乎是一个字符串数组,因此相应地更新了答案。

更新

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

 BigDecimal sum = BigDecimal.ZERO;
for(String arg : args){
  sum = sum.add( new BigDecimal( arg ) );
}

这种方法有几个优点(尽管有点慢,所以不要将它用于时间紧迫的操作):

  • 保持精度,使用 double 你会随着数学运算的数量逐渐失去精度(或者根本得不到精确的精度,具体取决于数字)
  • 实际上消除了溢出的可能性。但是请注意, BigDecimal 可能比适合 doublelong 的更大。

原文由 Thomas 发布,翻译遵循 CC BY-SA 3.0 许可协议

int values[] = { 23, 1, 5, 78, 22, 4};

int sum = 0;
for (int i = 0; i < values.length; i++)
    sum += values[i];

double average = ((double) sum) / values.length;

原文由 devconsole 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题