[英]Calculate average in java
编辑:我已经为平均值编写了代码,但我不知道如何制作它,以便它也使用我的args.length
而不是数组中的int
s。
我需要编写一个可以计算的 java 程序:
注意:我不想计算数组的平均值,而是计算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)
谁能指导我正确的方向? 或者举一个例子来指导我以正确的方式塑造这段代码?
提前致谢。
只需对您的代码进行一些小的修改(为了清楚起见,对 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 ) );
}
这种方法有几个优点(尽管速度有点慢,所以不要将它用于时间关键的操作):
BigDecimal
可能比适合double
或long
的更大。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;
这个
for (int i = 0; i<args.length -1; ++i)
count++;
基本上再次计算args.length
,只是不正确(循环条件应该是i<args.length
)。 为什么不直接使用args.length
(或nums.length
)呢?
否则你的代码似乎没问题。 虽然看起来您想从命令行读取输入,但不知道如何将其转换为数字数组 - 这是您真正的问题吗?
这似乎是旧线程,但 Java 从那时起已经发展并在 Java 8 中引入了 Streams 和 Lambdas。所以可能会帮助每个想要使用 ZD52387880E1EA22817A782D3759213 功能的人。
Arrays.stream(<arr>)
来执行此操作。 一旦你有字符串数组元素的 stream ,你可以使用mapToDouble(s -> Double.parseDouble(s))
它将 stream 的字符串转换为 ZF7B44CFAFD5C52223D5498196C 的 ZF7B44CFAFD5C52223D5498196CStream.collect(supplier, accumulator, combiner)
来计算平均值。 这是一些很好的例子。Collectors.averagingDouble()
直接计算并返回平均值。 这里有一些例子。我将向您展示两种方法。 如果您的项目中不需要大量统计信息,只需执行以下操作。
public double average(ArrayList<Double> x) {
double sum = 0;
for (double aX : x) sum += aX;
return (sum / x.size());
}
如果您打算做很多统计数据,不妨不要重新发明轮子。 那么为什么不查看http://commons.apache.org/proper/commons-math/userguide/stat.html
你会陷入真正的爱!
public class MainTwo{
public static void main(String[] arguments) {
double[] Average = new double[5];
Average[0] = 4;
Average[1] = 5;
Average[2] = 2;
Average[3] = 4;
Average[4] = 5;
double sum = 0;
if (Average.length > 0) {
for (int x = 0; x < Average.length; x++) {
sum+=Average[x];
System.out.println(Average[x]);
}
System.out.println("Sum is " + sum);
System.out.println("Average is " + sum/Average.length);
}
}
}
System.out.println(result/count)
您不能这样做,因为 result/count 不是 String 类型,并且 System.out.println() 只接受 String 参数。 也许尝试:
double avg = (double)result / (double)args.length
对于 1. 读入的整数个数,您可以使用数组的长度属性,如:
int count = args.length
它不给你数组中的元素。 和 2. 计算平均值:你正在以正确的方式做。
代替:
int count = 0;
for (int i = 0; i<args.length -1; ++i)
count++;
System.out.println(count);
}
你可以
int count = args.length;
平均值是 args 的总和除以 args 的数量。
int res = 0;
int count = args.lenght;
for (int a : args)
{
res += a;
}
res /= count;
您也可以使此代码更短,我会让您尝试询问您是否需要帮助!
这是我的第一个答案,如果有问题请告诉我!
如果您尝试从命令行 args 获取整数,则需要以下内容:
public static void main(String[] args) {
int[] nums = new int[args.length];
for(int i = 0; i < args.length; i++) {
try {
nums[i] = Integer.parseInt(args[i]);
}
catch(NumberFormatException nfe) {
System.err.println("Invalid argument");
}
}
// averaging code here
}
至于实际的平均代码,其他人建议你如何调整它(所以我不会重复他们所说的)。
编辑:实际上最好把它放在上面的循环中而不使用nums
数组
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.