从数组数的平均值中减去数组元素的方法
Method subtracting elements of array from average of array numbers
我有一个 double
类型的数组,它由用户输入的值填充,这些值是游泳比赛的单圈时间。它将时间存储在 lapArray
中,我有几种方法,但其中一种方法计算 lapArray
中所有数字的平均值。但是,我有另一种方法 getDeviationsArray
可以确定单圈时间是低于平均水平还是高于平均水平,并用这些结果填充一个名为 devArray
的数组。
基本上只是从平均值中减去每圈时间,但是如果单圈时间高于平均值,我得到的结果是 0
。这可能是我的四舍五入,但我想得到一个较慢的时间的负面结果。
这是我的预期输出:
我有其他方法 getFastest
、getSlowest
、getAverage
和 get raceTime
已经完成的前四行。我只需要从平均值中适当地减去单圈时间,然后还找到一种方法,如果单圈时间大于平均值,它应该有一个 (+
) 符号并且小于平均值有一个 (-
) 标志。
代码:
public static double[] getDeviationsArray(Double[] inputArray) {
double[] devArray = new double[inputArray.length];
double diff = 0;
for (int i = 0; i < inputArray.length - 1; ++i) {
if (inputArray[i] < getAverageSplit(inputArray)) {
diff = Math.abs(inputArray[i] - getAverageSplit(inputArray));
devArray[i] = diff;
} else {
diff = Math.abs(getAverageSplit(inputArray) - inputArray[i]);
devArray[i] = diff;
}
}
return devArray;
}
System.out.println("Here are the split-times and deviations for each lap/length:\n");
double[] devArray1 = getDeviationsArray(lapArray);
DecimalFormat df = new DecimalFormat("#.##");
int index1 = 1;
for (int i = 0; i < lapArray.length; i++) {
System.out.println("Lap or length #" + index1 + ": " + lapArray[i] + " seconds ("
+ Double.valueOf(df.format(devArray1[i])) + ")");
index1++;
}
感觉你把这个复杂化了。您应该将负差异保留为负而不是使用 abs
,然后使用“+”符号进行格式化:
double[] devArray = new double[inputArray.length];
double average = getAverageSplit(inputArray));
for (int i = 0; i < inputArray.length; ++i) {
devArray[i] = inputArray[i] - average;
}
另请注意,这可以通过流操作来完成,这可能会更直接一些:
double[] devArray = Arrays.stream(inputArray).map(t -> t - average).toArray();
然后用下面的代码用符号和2位小数格式化:
String.format("%+.2f", devArray[i])
我有一个 double
类型的数组,它由用户输入的值填充,这些值是游泳比赛的单圈时间。它将时间存储在 lapArray
中,我有几种方法,但其中一种方法计算 lapArray
中所有数字的平均值。但是,我有另一种方法 getDeviationsArray
可以确定单圈时间是低于平均水平还是高于平均水平,并用这些结果填充一个名为 devArray
的数组。
基本上只是从平均值中减去每圈时间,但是如果单圈时间高于平均值,我得到的结果是 0
。这可能是我的四舍五入,但我想得到一个较慢的时间的负面结果。
这是我的预期输出:
我有其他方法 getFastest
、getSlowest
、getAverage
和 get raceTime
已经完成的前四行。我只需要从平均值中适当地减去单圈时间,然后还找到一种方法,如果单圈时间大于平均值,它应该有一个 (+
) 符号并且小于平均值有一个 (-
) 标志。
代码:
public static double[] getDeviationsArray(Double[] inputArray) {
double[] devArray = new double[inputArray.length];
double diff = 0;
for (int i = 0; i < inputArray.length - 1; ++i) {
if (inputArray[i] < getAverageSplit(inputArray)) {
diff = Math.abs(inputArray[i] - getAverageSplit(inputArray));
devArray[i] = diff;
} else {
diff = Math.abs(getAverageSplit(inputArray) - inputArray[i]);
devArray[i] = diff;
}
}
return devArray;
}
System.out.println("Here are the split-times and deviations for each lap/length:\n");
double[] devArray1 = getDeviationsArray(lapArray);
DecimalFormat df = new DecimalFormat("#.##");
int index1 = 1;
for (int i = 0; i < lapArray.length; i++) {
System.out.println("Lap or length #" + index1 + ": " + lapArray[i] + " seconds ("
+ Double.valueOf(df.format(devArray1[i])) + ")");
index1++;
}
感觉你把这个复杂化了。您应该将负差异保留为负而不是使用 abs
,然后使用“+”符号进行格式化:
double[] devArray = new double[inputArray.length];
double average = getAverageSplit(inputArray));
for (int i = 0; i < inputArray.length; ++i) {
devArray[i] = inputArray[i] - average;
}
另请注意,这可以通过流操作来完成,这可能会更直接一些:
double[] devArray = Arrays.stream(inputArray).map(t -> t - average).toArray();
然后用下面的代码用符号和2位小数格式化:
String.format("%+.2f", devArray[i])