一个简单的小算法求助

找出一个数组中既不是最大的数也不是最小的数,我的java代码如下(错误的):

 class NotMM{
    public void NotMM(int arr[]){
        int mid = arr[0];
        for(int i=0;i<arr.length-2;i++){
            if(arr[i+1]>arr[i]&&arr[i+1]<arr[i+2]){
                mid = arr[i+1];
            }else if(arr[i+1]<arr[i]&&arr[i+1]>arr[i+2]){
                mid = arr[i+1];
            }else if(arr[i]<arr[i+1]&&arr[i]>arr[i+2]){
                mid = arr[i];
            }else if(arr[i]>arr[i+1]&&arr[i]<arr[i+2]){
                mid = arr[i];
            }else{
                mid = arr[i+2];
            }
            System.out.println(mid);
        }
    }
}

public class Ex1_4 {
    public static void main(String[] args) {
        NotMM m = new NotMM();
        int arr[] = new int[]{2,4,6,1,7,5,3,8};
        m.NotMM(arr);
    }
}

请大侠改正,用简单的算法,谢谢!

排序之后掐头去尾,然后随机选一个

额。问个问题,就是"只要既不是最大也不是最小就满足条件"吗

先对数组进行升序或降序排序,排好序不要数组两端的值就可以啦

可以先排序,再取中间元素
Arrays.sort(arr);
mid=arr[arr.length()/2];


可以先排序,再取中间元素
Arrays.sort(arr);
mid=arr[arr.length()/2];


如果只找出一个就可以,那很简单啊。。
只要取前三个数就可以了。。。
如果是找出所有,那就和找出最大最小数完全一致=_=
感觉题目出的好奇怪。。
if(arr.length<3) {
throw new RuntimeException("无法取得匹配结果");
} else {
return Math.min(arr[0],arr[1],arr[2]);
}

其实就是去掉最大和最小数的剩下的数,首先可以用冒泡排序,然后再截取数组中间的部分!

图片说明这个可以吧