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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩俊杰 中级黑马   /  2012-11-22 11:06  /  2244 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 韩俊杰 于 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是从哪出来的?请各位高手指点指点

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 神马都是浮云

查看全部评分

8 个回复

倒序浏览
本帖最后由 段海涛 于 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]);

一个意思,呵呵,你应该懂了

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 金鑫 于 2012-11-22 13:27 编辑

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

  

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
你返回的是数组中的角标,你的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; //返回最大值
}
}

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
只不过你返回的是角标,很正确的程序哦

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 赞一个!

查看全部评分

回复 使用道具 举报
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]);  //改变方式一




评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
这也刚学到这里 看了半天才看懂,然后试着改了一下,将最后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]; //返回最大值
}
}

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
陈山 中级黑马 2012-11-23 23:26:26
8#
你返回的是最大值的下标,还有你的代码写错了,应该是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]; //返回最大值
     }
}



回复 使用道具 举报
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为最大值得角标;

其实是个小小的错误;

仔细点,可以避免的;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马