A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 乔叶旭 于 2012-11-25 03:11 编辑

/*给定一个数组,获取组中的最大值*/
class Demo
{
        public static void main(String[] args)
        {
                int max;
                int[] arr = new int[]{5,1,6,4,2,8,9};
                max = compare(arr);
                System.out.println("max = "+max);
        }
        public static int compare(int[] arr)
        {
                int x;
                for (x =0;x <arr.length-1 ;x++ )
                {
                        if (arr[x] >= arr[x+1])
                        {
                                arr[x+1] = arr[x];
                        }
                        else
                        {
                                arr[x+1] = arr[x+1];
                        }
                }
                return arr[x + 1];
        }
}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
我也是新手,仔细看了下你的程序,你在判断最值的时候,判断方法是不对的,感觉比较混乱,,导致了数组下标的越界!
你自己读下程序就可以感觉出来!
对于最值,应该首先为其开辟一块存储空间,用来记录你每一次判断出来的最大值!
我这份代码写的是:先假定第一个数为最大值,比较之后再进行换位置!
  1. public static int getMax(int[] arr)
  2.         {
  3.                 int max = arr[0];

  4.                 for (int x=1;x<arr.length ;x++ )
  5.                 {
  6.                         if (arr[x]>max)
  7.                         {
  8.                                 max = arr[x];
  9.                         }
  10.                 }
  11.                 return max;
  12.         }
复制代码
我写的一段,没把主函数贴上,你看看!希望对你有所帮助!

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
余磊 发表于 2012-11-25 02:05
我也是新手,仔细看了下你的程序,你在判断最值的时候,判断方法是不对的,感觉比较混乱,,导致了数组下标 ...

我明白了为什么越界了,因为最后的 x++ 使 x 多加了一次,所以越界,只要改为  return arr[x] 就好了。

谢谢你的代码,确实精简,我的思想是冒泡比较,即第一个和第二个比较如果第一个大,则把第一的值赋给第二个,然后再让第二个和第三个比较。
回复 使用道具 举报
乔叶旭 发表于 2012-11-25 03:11
我明白了为什么越界了,因为最后的 x++ 使 x 多加了一次,所以越界,只要改为  return arr[x] 就好了。

...

其实后来我睡觉前又想了一下,越界的问题我也想了出来!
你的想法是好的,我觉得读起来很是费力!
如果你那么想的话,不如直接写个冒泡,然后获取第一个和最后一个,就是数组的最值了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马