一个很容易被坑的点(找出最大最小值并交换)
其实程序要写出来,并不难。只是想走捷径,就容易误入歧途。题目如下:
输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 最开始的代码如下:
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+" "); } }
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了