一个很容易被坑的点(找出最大最小值并交换)



其实程序要写出来,并不难。只是想走捷径,就容易误入歧途。题目如下:
输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 最开始的代码如下:

public class Classic35_1 {
    public static void main(String[] args){
        int[] a = {10,17,23,876,3,67,93,3,32,7,3,23,435};
        int max = 0;
        int min = 0;
        int temp;
//        找到最大最小的位置
        for(int i = 0;i<a.length;i++){
            if(a[i]>a[max])
                max = i;
            if(a[i]<a[min])
                min = i;
        }
//       交换
        temp=a[max];
        a[max]=a[0];
        a[0]=temp;

        temp=a[min];
        a[min]=a[a.length-1];
        a[a.length-1]=temp;
//        输出
        for(int x : a)
            System.out.print(x+" ");
    }
}


乍一看确实没有问题,但是当最小最大位置为特殊位置时候,这个程序就不能正常运行了,即最大的元素在最后或者最小的元素在开头,例如这组数据:1,17,23,876,3,67,93,3,32,7,3,23,435,如果先交换最大值,再交换最小值,那么得到的结果就是435,17,23,1,3,67,93,3,32,7,3,23,876,这是完全错误的。 对于这种临界条件考虑欠妥,导致第一个程序有问题,这样还不如使用最原始的方法,如下:

public class Classic35 {
    public static void main(String[] args){
        int[] a = {1,17,23,876,3,67,93,3,32,7,3,23,435};
        int max = 0;
        int min = 0;
        int temp;
//        找到最大的位置
        for(int i = 0;i<a.length;i++){
            if(a[i]>a[max])
                max = i;
        }
//       交换
        temp=a[max];
        a[max]=a[0];
        a[0]=temp;
//                找到最小的位置
        for(int i = 0;i<a.length;i++){
            if(a[i]<a[min])
                min = i;
        }
//       交换
        temp=a[min];
        a[min]=a[a.length-1];
        a[a.length-1]=temp;
//        输出
        for(int x : a)
            System.out.print(x+" ");
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值