簡體   English   中英

從數組數的平均值中減去數組元素的方法

[英]Method subtracting elements of array from average of array numbers

我有一個double類型的數組,由用戶輸入的值填充,這些值是游泳比賽的單圈時間。 它將時間存儲在lapArray中,我有幾種方法,但其中一種方法是計算lapArray中所有數字的平均值。 但是,我有另一種方法getDeviationsArray應該找出單圈時間是低於平均值還是高於平均值,並用這些結果填充一個名為devArray的數組。

基本上只是從平均值中減去每個單圈時間,但是如果單圈時間高於平均值,我會得到0的結果。 這可能是我的四舍五入,但我想得到一個否定的結果,這將是一個較慢的時間。

這是我預期的 output:

在此處輸入圖像描述

我的前四行是我的其他方法getFastestgetSlowestgetAverage和 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;
}

另請注意,這可以通過 stream 操作來完成,這可能更簡單一些:

double[] devArray = Arrays.stream(inputArray).map(t -> t - average).toArray();

然后使用以下代碼用符號和 2 位小數格式化:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM