一个很容易被坑的点(找出最大最小值并交换)
来源:互联网 发布:借尸还魂事件 知乎 编辑:程序博客网 时间:2024/06/06 12:54
其实程序要写出来,并不难。只是想走捷径,就容易误入歧途。题目如下:
输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 最开始的代码如下:
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+" "); }}
0 0
- 一个很容易被坑的点(找出最大最小值并交换)
- apply提高数组找出最大最小值的方式(性能)
- 找出出列表的最大最小值
- Python实现:斐波那契数列、交换两个变量的值、从一组数据中找出最大最小值
- 如何用最少的比较次数找出一个数列的最大和最小值
- 交换最大最小值
- 3.创建一个20个大小的随机数组,找出这组数组的最大值和最小值, 并且标出最大数和最小值的位置
- 选择排序本质:内层循环找出最小值并与数组左边的交换,外层循环进行数组从左到右排序,从小到大排序。
- 用最简单的方法实现---C++输入10个数存到数组,找出最小值并与第一个元素交换
- poj2079(一堆点找出最大的三角形)
- 找出最大的数并统计个数
- 使用一个函数找出整型数组的最大值或最小值
- 一个很容易被忽略的东西----toString()
- 中国人,很容易被利用的一个民族
- 中国人,很容易被利用的一个民族
- 通过随机数生成办法,向int num[10][10]的数组 中存入数据并找出数组的最大、最小值及其下标。
- java__for找出数组中最大,最小值
- 数组进阶找出最大或最小值
- UVA 592 - Island of Logic
- 省创记录(一)
- 织梦channelartlist标签当前栏目高亮
- 反射实现加依赖注入
- jni练习(二)
- 一个很容易被坑的点(找出最大最小值并交换)
- 拿破仑经典名言
- 在input中右边加上一个图标的css样式
- 黑马程序员——java中集合的各种遍历方式总结
- 嵌入式 Hi3515视频编码(H.264)笔记
- 仿QQ空间滚动ActionBar透明度变化Demo
- poj 3279 Fliptile
- HTML表单密码框里的默认提示信息效果代码
- 类的多态性实现PHP依赖注入模式(模式一)