黑马程序员技术交流社区

标题: 关于求数组最值的问题 [打印本页]

作者: 韩俊杰    时间: 2012-11-22 11:06
标题: 关于求数组最值的问题
本帖最后由 韩俊杰 于 2012-11-22 12:54 编辑

public class Zuizhi {

public static void main(String[] args) {
  int []arr ={2,6,8,3,9,1};  //初始化一个数组
  int max=getMax(arr);       //调用方法获取最大值
  System.out.println(max);
}


public static int getMax(int []arr){
  int max=0;
  for (int i=1;i<arr.length;i++){
   if (arr>arr[max]){
    max=i;          //局部变量max记录最大值
   }
  }
  return max; //返回最大值
}
}

我想获取最大值,输出结果应该是9才对,可是输出结果是4,这个4是从哪出来的?请各位高手指点指点

作者: 段海涛    时间: 2012-11-22 11:14
本帖最后由 段海涛 于 2012-11-22 11:16 编辑

兄弟,你return的是最大值所对应的“角标”!  

你这个算法里面的max记录的是最大值的“角标”
而你的数组中的最大值是 9 ,它对应的“角标”是 4 ,  因此返回的max的值确实应该等于4

算法没有问题,你把返回值修改一下就可以了:
return max;   改成  return arr[max];

或者
将main方法中的  System.out.println(max);
改成  System.out.println(arr[max]);

一个意思,呵呵,你应该懂了
作者: 金鑫    时间: 2012-11-22 11:14
本帖最后由 金鑫 于 2012-11-22 13:27 编辑

if (arr>arr[max]){
    max=i;
你上面的代码其实并不是把max当做数组的最大值,而是把max当成了数组最大值的角标,所以他返回的是数组最大值的角标元素,即是4。

  


作者: 李贺晓    时间: 2012-11-22 11:35
你返回的是数组中的角标,你的getMax方法中,最后返回的值是max,此处你的max是用作角标的,把你的输出结果换一下就OK了
public class Zuizhi {

public static void main(String[] args) {
  int []arr ={2,6,8,3,9,1};  //初始化一个数组
  int max=getMax(arr);       //调用方法获取最大值角标
  System.out.println(arr[max]);//此时输出的是最大值
}


public static int getMax(int []arr){
  int max=0;
  for (int i=1;i<arr.length;i++){
   if (arr[i]>arr[max]){
    max=i;          //局部变量max记录最大值
   }
  }
  return max; //返回最大值
}
}

作者: jerry2627    时间: 2012-11-22 11:35
只不过你返回的是角标,很正确的程序哦
作者: 唐永康    时间: 2012-11-22 11:47
public class Zuizhi {

public static void main(String[] args) {
  int []arr ={2,6,8,3,9,1};  //初始化一个数组
  int max=getMax(arr);       //调用方法获取最大值
  System.out.println(max);  //改变方式一
}


public static int getMax(int []arr){
  int max=0;
  for (int i=1;i<arr.length;i++){
   if (arr>arr[max]){
    max=i;          //局部变量max记录最大值
   }
  }
  return max; //返回最大值,改变方式二。
}
}

可以有两种方式改变,两者改变其中之一就可以了。
先说改变方式二:
只要把原代码的一句改变成这样就对了。return arr[max];   其他的不用变。
你这返回的是数组的下角标,max,而如果你想到返回数组里面的的值,应该是这样的。arr[max]这个代表一个具体的数组的值,max代表一个数组的下角标。
这里你可能对数组的值和数组的下角标没有理解清楚.

改变方式一:
把你的原代码的一小部分改变成这样,其他代码不变。System.out.println(arr[max]);  //改变方式一





作者: 周同欢    时间: 2012-11-22 11:57
这也刚学到这里 看了半天才看懂,然后试着改了一下,将最后return max; 改成return arr[max]; 发现就可以了
这样返回的就是arr[]数组的那个max角标中的值了
  



public class Zuizhi {

public static void main(String[] args) {
  int[] arr ={2,6,8,3,9,1};  //初始化一个数组
  int max=getMax(arr);       //调用方法获取最大值
  System.out.println(max);
}


public static int getMax(int []arr){
  int max=0;
  for (int i=1;i<arr.length;i++){
   if (arr[i]>arr[max]){
    max=i;          //局部变量max记录最大值
   }
  }
  return arr[max]; //返回最大值
}
}
作者: 陈山    时间: 2012-11-23 23:26
你返回的是最大值的下标,还有你的代码写错了,应该是arr,如下图:

改正后的代码如下:
public class ZuiZhi {
    public static void main(String[] args) {
          int []arr ={2,6,8,3,9,1};  //初始化一个数组
          int max=getMax(arr);       //调用方法获取最大值
          System.out.println(max);
     }

    public static int getMax(int []arr){
           int max=0;
           for (int i=1;i<arr.length;i++){
                  if (arr>arr[max]){
                     max=i;          //局部变量max记录最大值
                 }
          }
           return arr[max]; //返回最大值
     }
}




作者: 孙万利    时间: 2012-11-24 18:26
public class Zuizhi {

public static void main(String[] args) {
  int []arr ={2,6,8,3,9,1};  //初始化一个数组
  int max=getMax(arr);       //调用方法获取最大值
  System.out.println(max);
}


public static int getMax(int []arr){
  int max=0;
  for (int i=1;i<arr.length;i++){
   if (arr>arr[max]){
    max=i;          //局部变量max记录最大值
   }
  }
  return max; //返回最大值
}
}

我想获取最大值,输出结果应该是9才对,可是输出结果是4,这个4是从哪出来的?请各位高手指点指点



同学,你上面的代码没什么大问题,问题出在这里:
int max=0;
  for (int i=1;i<arr.length;i++){
   if (arr>arr[max]){
    max=i;          //局部变量max记录最大值
   }
  }
  if语句应该是if(arr[i]>arr[max]){
               max=i;
}

然后你  return  max;  max为最大值得角标;

其实是个小小的错误;

仔细点,可以避免的;





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