【问题标题】:Method subtracting elements of array from average of array numbers从数组数的平均值中减去数组元素的方法
【发布时间】:2021-04-20 21:22:56
【问题描述】:

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

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

这是我的预期输出:

我的前四行是我的其他方法getFastestgetSlowestgetAverage 和 getraceTime 已经完成的。我只需要从平均值中适当地减去单圈时间,然后还找到一种方法,如果单圈时间大于平均值,则它应该有一个 (+) 符号并且小于平均值有一个 (-) 符号。

代码:

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

【问题讨论】:

    标签: java arrays double rounding


    【解决方案1】:

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

    【讨论】:

    • OP 可以直接使用System.out.printf。另一个可能的建议是使用带有前导零%+06.2f 的固定宽度格式。但显然比DecimalFormat 更容易
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 2022-01-11
    相关资源
    最近更新 更多