从数组编号的平均值中减去数组元素的方法

时间:2021-04-20 21:22:56

标签: java arrays double rounding

我有一个 double 类型的数组,它由用户输入的值填充,这些值是游泳比赛的单圈时间。它将时间存储在 lapArray 中,我有几种方法,但一种计算 lapArray 中所有数字的平均值。但是,我有另一种方法 getDeviationsArray 应该找出单圈时间是低于平均值还是高于平均值,并用这些结果填充一个名为 devArray 的数组。

基本上只是从平均值中减去每圈时间,但是如果单圈时间高于平均值,我会得到 0 的结果。这可能是我的四舍五入,但我想得到一个负面的结果,这将是一个更慢的时间。

这是我的预期输出:

enter image description here

我的其他方法 getFastestgetSlowestgetAverage 和 get raceTime 已经完成了前四行。我只需要从平均值中正确减去单圈时间,然后还找到一种方法,如果单圈时间超过平均值,则它应该有一个 (+) 符号并且小于平均值有一个 ({{1} }) 签名。

代码:

-
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;
}

1 个答案:

答案 0 :(得分:2)

感觉你把这个问题复杂化了。您应该将负差异保留为负,而不是使用 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();

然后用下面的代码用一个符号和两位小数来格式化:

String.format("%+.2f", devArray[i])