去掉最大值和最小值求平均值怎么运行不了

import java.util.Scanner;
public class average {
    public static void main(String[]args){
        Scanner in =new Scanner(System.in);
        int n =in.nextInt();
        int[]arr = new int[n];
        int sum=arr[0];
        sum+=arr[n];
        for(int i=0;i-1;i++){
            arr[i]=in.nextInt();
            for(int j=0;j-1-i;j++){
                arr[j]=in.nextInt();
                if (arr[j]>arr[j+1]) {
                    int index = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = index;
                }
            }
        }
        int average =(sum-arr[0]-arr[arr.length-1])/(arr.length-2);
        System.out.println("平均值为"+average);
    }
}

望采纳!点击该回答右侧的“采纳”按钮即可采纳!!!
这个代码存在一些问题:我给你列出来了

  1. 数组arr的值是在排序之后才赋值的,但是sum的值是在数组arr赋值之前就被计算了。所以sum的值始终是0。
  1. 在求平均值时,应该将sum的值改为所有数的总和,而不是只加第一个数和最后一个数。
  1. 在排序时,应该每次比较相邻的两个数,而不是每次都比较所有的数。

根据你的代码,修改如下

import java.util.Scanner;

public class average {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] arr = new int[n];
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            arr[i] = in.nextInt();
            sum += arr[i];
        }

        // 使用冒泡排序排序数组arr
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
   // 去掉最大值和最小值后求平均值
    int average = (sum - arr[0] - arr[arr.length - 1]) / (arr.length - 2);
    System.out.println("平均值为" + average);
}
}

望采纳。代码存在以下问题:

  • 1.在读入数组 arr 的值之前,你使用了 sum+=arr[0] 和 sum+=arr[n] 对 sum 进行了更新,但是 arr 的值还没有被赋值,所以这两行代码没有任何意义。
  • 2.你在读入数组 arr 的值时使用了两层循环,但是两层循环是没有必要的,只需要一层循环就可以读入所有的值。
  • 3.你在排序数组 arr 时使用了冒泡排序算法,但是冒泡排序算法的时间复杂度为 O(n^2),在数据规模较大时效率较低。建议使用更快的排序算法,如快速排序或归并排序。

修改后的代码如下

import java.util.Scanner;

public class Average {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] arr = new int[n];
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            arr[i] = in.nextInt();
            sum += arr[i];
        }

        // 使用快速排序算法对数组进行排序
        quickSort(arr, 0, arr.length - 1);

        // 计算数组去掉最大值和最小值后的平均值
        int average = (sum - arr[0] - arr[arr.length - 1]) / (arr.length - 2);
        System.out.println("平均值为 " + average);
    }

    // 快速排序算法
    private static void quickSort(int[] arr, int left, int right) {
        if (left >= right) {
            return;
        }
        int pivotIndex = partition(arr, left, right);
        quickSort(arr, left, pivotIndex - 1);
        quickSort(arr, pivotIndex + 1, right);
    }

    private static int partition(int[] arr, int left, int right) {
        int pivot = arr[right];
        int i = left - 1;
        for (int j = left; j < right; j++) {
            if (arr[j] <= pivot) {
                i++;
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        int temp = arr[i + 1];
        arr[i + 1] = arr[right];
        arr[right] = temp;
        return i + 1;
    }
}

因为第8行那里数组越界了,然后数组的排序和获取元素的值要分开,修改如下:

参考链接:
https://zhuanlan.zhihu.com/p/126354159

 import java.util.Scanner;
public class average {
    public static void main(String[]args){
        Scanner in =new Scanner(System.in);
        int n =in.nextInt();
        int[]arr = new int[n];
        int sum=0; // 数组元素的和初始值为0
        //sum+=arr[n];
        for(int i=0;i<arr.length;i++){
            arr[i]=in.nextInt();
            sum+=arr[i]; // 把当前的数组元素的值累加到和中

        }
        
        for(int i=0;i<arr.length-1;i++){
            
            for(int j=0;j<arr.length-1-i;j++){
               
                if (arr[j]>arr[j+1]) {
                    int index = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = index;
                }
            }
        }
        
        for(int i=0;i<arr.length;i++){
            
           System.out.print(arr[i]+" ");
        }
       // int average =(sum-arr[0]-arr[arr.length-1])/(arr.length-2);
        double  average =((double)sum)/n; // 用和除以数组元素的个数即数组元素和的平均值,用double强制类型转换下sum,以便使结果为double类型
        System.out.println("\n平均值为"+average);
    }
}

img

这题根本用不到排序

import java.util.Scanner;
public class average {
    public static void main(String[]args){
        Scanner in =new Scanner(System.in);
        int n =in.nextInt();
        int a;
        int max=-999;
        int min=9999;
        while(n--)
        {
            a=in.nextInt();
            if(max<a)max=a;
            if(min>a)min=a;
            sum+=a;
        }
        int average =(sum-max-min)/(n-2d);
        System.out.println("平均值为"+average);
    }
}