这个怎么改double类型



    public static double getAerage(int[] arr) {
        int max = arr[0];
        int min = arr[0];
        int sum = 0;
        if (arr != null) {
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] > max) {
                    max = arr[i];
                }
                if (arr[i] < max) {
                    min = arr[i];
                }
                sum += arr[i];
                return (sum - max - min) * 1.0 / (arr.length - 2);
            }
        } else {
            return 0;
        }
      
    }(这里一直报错)
}

报错的原因是因为不能保证所有的分支都有返回值,把 for 循环内部的 return 移到外部就可以了。

    public static double getAerage(int[] arr) {
        int max = arr[0];
        int min = arr[0];

        int sum = 0;
        if (arr != null) {
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] > max) {
                    max = arr[i];
                }
                if (arr[i] < max) {
                    min = arr[i];
                }
                sum += arr[i];
            }
            return (sum - max - min) * 1.0 / (arr.length - 2);
        } else {
            return 0;
        }
    }

18行return 0 改成return 0.0;
16行移到17行下面

代码存在几个问题

  • if (arr != null) 应该放在最外层
  • return (sum - max - min) * 1.0 / (arr.length - 2); 这段也应该放在for的外边,如果放在循环里,应加上条件判断,否则循环失去了意义!
    修改后的代码如下:

    public static double getAerage(int[] arr) {
        int length = arr.length;
        if (length != 0) {
            int max = arr[0];
            int min = arr[0];
            int sum = 0;
            for (int i = 0; i < length; i++) {
                if (arr[i] > max) {
                    max = arr[i];
                }
                if (arr[i] < max) {
                    min = arr[i];
                }
                sum += arr[i];
            }
            return (sum - max - min) * 1.0 / (length - 2);
        }
        return 0;
    }