黑马程序员技术交流社区

标题: 这是个神奇的问题....!!!! [打印本页]

作者: 黄兴旺    时间: 2013-8-11 00:12
标题: 这是个神奇的问题....!!!!
本帖最后由 黄兴旺 于 2013-8-11 00:58 编辑
  1. class aaa
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[] arr ={1,4,5,8,3,2};
  6.                 System.out.println(getMax(arr));
  7.                 System.out.println(getMin(arr));
  8.         }
  9.         public static int getMax(int[] arr)
  10.         {
  11.                 int max = 0;
  12.                 for (int x=1;x<arr.length ;x++ )
  13.                 {
  14.                         if (arr[x]>arr[max])
  15.                                 arr[max] = arr[x];
  16.                 }
  17.                 return arr[max];
  18.         }
  19.         public static int getMin(int[] arr)
  20.         {
  21.                 int min = 0;
  22.                 for (int x = 1;x<arr.length ;x++ )
  23.                 {
  24.                         if(arr[x]<arr[min])
  25.                                 arr[min] = arr[x];
  26.                 }
  27.                 return arr[min];
  28.         }
  29. }
  30.   
复制代码
运行起来怎么不对??

作者: xscn    时间: 2013-8-11 00:35
  1. class aaa
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[] arr ={1,4,5,8,3,2};
  6.                 System.out.println(getMax(arr));
  7.                 System.out.println(getMin(arr));
  8.         }
  9.         public static int getMax(int[] arr)
  10.         {
  11.                 int max = 0;
  12.                 for (int x=1;x<arr.length ;x++ )
  13.                 {
  14.                         if (arr[x]>arr[max])
  15.                                 max = x;
  16.                 }
  17.                 return arr[max];
  18.         }
  19.         public static int getMin(int[] arr)
  20.         {
  21.                 int min = 0;
  22.                 for (int x = 1;x<arr.length ;x++ )
  23.                 {
  24.                         if(arr[x]<arr[min])
  25.                                 min =x ;
  26.                 }
  27.                 return arr[min];
  28.         }
  29. }
  30.   
复制代码

作者: longlangcx    时间: 2013-8-11 00:40
你在获取最大值最小值的时候改变了原数组。
你用原数组的0角标来存储的最值,而没有用你设置的max和min,这样在获取最值时就对原数组进行了改变。
更重要的是,你的改变不是交换位置,而是直接覆盖。
你的程序再执行完getMax()方法之后,原数组中的1已经不见了。在getMax之后,你的原数组变成了{8,4,5,8,3,2}。这样在获取最小值的时候,自然得到的最小值就是2,因为1已经不在数组中了。
作者: 黄兴旺    时间: 2013-8-11 00:57
longlangcx 发表于 2013-8-11 00:40
你在获取最大值最小值的时候改变了原数组。
你用原数组的0角标来存储的最值,而没有用你设置的max和min,这 ...

呵呵   懂了   谢谢 哥们
作者: 黄兴旺    时间: 2013-8-11 00:58
xscn 发表于 2013-8-11 00:35

谢谢哥们 ...
作者: xscn    时间: 2013-8-11 01:04
黄兴旺 发表于 2013-8-11 00:58
谢谢哥们 ...

其实数组这些排序冒泡啦选择啦等等最重要的是理解思想算法,至于排序结果,后面学到Arrays工具类会有更简便的做法,几行代码就能搞定。
  1. import static java.util.Arrays.*;
  2. import java.util.*;
  3. class Demo
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                int[] arr ={1,4,5,8,3,2};
  8.                sort(arr);
  9.                        //System.out.println(Arrays.toString(arr));
  10.                            System.out.println("Min="+arr[0]);
  11.                           
  12.                System.out.println("Max="+arr[arr.length-1]);


  13.         }
  14.       
  15. }
  16. ---------- java ----------
  17. Min=1
  18. Max=8

  19. 输出完成 (耗时 0 秒) - 正常终止
复制代码

作者: 黄兴旺    时间: 2013-8-11 01:08
xscn 发表于 2013-8-11 01:04
其实数组这些排序冒泡啦选择啦等等最重要的是理解思想算法,至于排序结果,后面学到Arrays工具类会有更简 ...

嗯嗯 多谢大神点拨




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2