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

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

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

我有我的其他方法的前四行 getFastest , getSlowest , getAverage ,然后 raceTime 我已经做了。我只需要从平均值中减去圈数,然后找到一种方法,如果圈数大于平均值,它应该有一个( + )符号和小于平均值有一个( - )签字。
代码:

  1. public static double[] getDeviationsArray(Double[] inputArray) {
  2. double[] devArray = new double[inputArray.length];
  3. double diff = 0;
  4. for (int i = 0; i < inputArray.length - 1; ++i) {
  5. if (inputArray[i] < getAverageSplit(inputArray)) {
  6. diff = Math.abs(inputArray[i] - getAverageSplit(inputArray));
  7. devArray[i] = diff;
  8. } else {
  9. diff = Math.abs(getAverageSplit(inputArray) - inputArray[i]);
  10. devArray[i] = diff;
  11. }
  12. }
  13. return devArray;
  14. }
  1. System.out.println("Here are the split-times and deviations for each lap/length:\n");
  2. double[] devArray1 = getDeviationsArray(lapArray);
  3. DecimalFormat df = new DecimalFormat("#.##");
  4. int index1 = 1;
  5. for (int i = 0; i < lapArray.length; i++) {
  6. System.out.println("Lap or length #" + index1 + ": " + lapArray[i] + " seconds ("
  7. + Double.valueOf(df.format(devArray1[i])) + ")");
  8. index1++;
  9. }
fiei3ece

fiei3ece1#

感觉你把事情搞得太复杂了。你应该让负数差为负数,而不是使用负数差 abs 然后用“+”号格式化:

  1. double[] devArray = new double[inputArray.length];
  2. double average = getAverageSplit(inputArray));
  3. for (int i = 0; i < inputArray.length; ++i) {
  4. devArray[i] = inputArray[i] - average;
  5. }

还要注意,这可以通过流操作来完成,流操作可能更简单一些:

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

然后使用以下代码格式化一个符号和两个小数:

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

相关问题