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

gblwokeq  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(283)

我有一个类型数组 double 由用户输入的值填充,这些值是游泳比赛的圈数。它把时间存储在 lapArray 我有几种方法,但其中一种是计算所有数字的平均值 lapArray . 不过,我有另一种方法 getDeviationsArray 它应该找出圈速是低于平均值还是高于平均值,并填充一个名为 devArray 有了这些结果。
基本上只是从平均值中减去每圈的时间,但是如果每圈的时间比平均值高,我会得到一个结果 0 . 这可能是我的四舍五入,但我想得到一个负的结果,这将是一个缓慢的时间。
这是我的预期输出:

我有我的其他方法的前四行 getFastest , getSlowest , getAverage ,然后 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++;
}
fiei3ece

fiei3ece1#

感觉你把事情搞得太复杂了。你应该让负数差为负数,而不是使用负数差 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])

相关问题