黑马程序员技术交流社区

标题: 关于比较的问题 [打印本页]

作者: 孙海亮    时间: 2011-12-15 21:40
标题: 关于比较的问题
本帖最后由 孙海亮 于 2011-12-15 22:43 编辑
  1. public static int bijiao1(int arr[])
  2.         {       
  3.                 int max=0;

  4.                 for(int x=1;x<arr.length;x++)
  5.                 {
  6.                         if(arr[max]<arr[x])
  7.                                 max=x;
  8.                                
  9.                 }
  10.                 return arr[max];
  11.                
  12.         }
复制代码
为什么把arr[max]中得max换成0输出的结果就会补一样呢?已经定义了max。输出的值应该是一样的啊!不解!球高手指教!
作者: 余松霖    时间: 2011-12-15 21:51
你返回的数组中的最大值.   你换成0返回的就是0角标的值.如果0角标本来就是最大值  ,那么arr[max]就和arr[0]  一样.
如果arr[0] 不是最大值 ,返回的肯定不一样啊 . 因为arr[max]返回的就是数组中的最大值.
作者: 吴上储    时间: 2011-12-15 21:51
x=1 arr[1]
max=0 arr[0] 怎么能一样
作者: 李晓斌    时间: 2011-12-15 21:53
我没明白楼主想问什么。你这是求数组最大值的函数。数组的第一个元素的角标为0,其次你定义的max为角标值,你先假设了max的角标为0
所以用for循环开始进行元素比较。显然,0角标元素不可能和0角标元素比较,因为自己和自己比无意义。所以你定义的x变量初始值为1,没有错啊。
作者: 孙海亮    时间: 2011-12-15 21:56
还是有点转不过来,能不能说的再详细点
作者: songxingchao    时间: 2011-12-15 22:01
关键是这2句话,   if(arr[max]<arr[x])
                            max=x;
max早就不是0了,  已经变成x了, x可能是1到length之间的任何数值。
作者: 黄达标    时间: 2011-12-15 22:03
经过arr[max]<arr[x]);比较之后,你把x的值赋给了max,max就变了,所以arr[max]的值也变了
作者: 余松霖    时间: 2011-12-15 22:06
本帖最后由 余松霖 于 2011-12-15 22:07 编辑
孙海亮 发表于 2011-12-15 21:56
还是有点转不过来,能不能说的再详细点
  1. public static int bijiao1(int arr[])
  2.         {        
  3.                 int max=0;

  4.                 [color=Red]for(int x=1;x<arr.length;x++)
  5.                 {
  6.                         if(arr[max]<arr[x])
  7.                                 max=x;
  8.                                 
  9.                 }[/color]//你这个for循环目的就是找出数组中最大值的角标max               
  10.                 return arr[max];//这里返回的是数组中的最大值
  11.                
  12.         }
复制代码
为什么把arr[max]中得max换成0输出的结果就会补一样呢?已经定义了max。输出的值应该是一样的啊

你定义了max,=.for循环之后,这个max值很可能已经变了.返回的结果怎么可能是一样的呢.
建议你认认真真看毕老师的视频.一定会懂的.
作者: 武超    时间: 2011-12-15 22:11
arr[max]中的max是个变量,在程序运行的时候是随着max=x而改变的,当然不可能一样了,最后输出的就是arr[max]比较过后的最大值。
作者: 周胜    时间: 2011-12-15 22:11
本帖最后由 周胜 于 2011-12-15 22:17 编辑

public class CompareTest {

        public static void main(String[] args) {
               
                int[] arr = {1,3,2,8,5};
                System.out.println(bijiao1(arr));
        }
    public static int bijiao1(int arr[])
    {      
            int max=0;

            for(int x=1;x<arr.length;x++)
            {
                    if(arr[max]<arr[x])
                            max=x;
                           
            }
            return arr[max];
           
    }

}
输出数组中的最大数8.
要是把arr[max]换成arr[0],只要数组中有数大于arr[0],max=x这个条件就会执行,就会输出数组中德最后一个数5;没有的话只会输出arr[0]也就是1;
其实最主要的是在if循环中若是arr[max]的话,max值是会变的,arr[max]也会随之改变。若是arr[0]的话,只会与1比较。

作者: 孙海亮    时间: 2011-12-15 22:20
周胜 发表于 2011-12-15 22:11
public class CompareTest {

        public static void main(String[] args) {

我也知道是这样啊,也知道肯定是错的,但是能不能给出一个易懂的方法!
作者: 孙海亮    时间: 2011-12-15 22:34
晕死!到现在才终于从死墙角里钻出来!谢谢大家!
作者: 王亚男    时间: 2011-12-15 22:37
int max = 0 ,首先你需要明白的就是max身为角标,它的初始化值为0,也就是说是arr[0];
如果有数组int[] arr = {2,4,6,8};
这时arr[max](这里的max还是0)初始化就是数组内第一个元素,也就是arr[0],也就是数组内的2。
然后是循环体
for(int x=1;x<arr.length;x++)
{
   if (arr[max]<arr[x]; //你可以先理解第一个循环。首先,这里我们知道max的值为0,x的值为1,也就是说if (arr[0]<arr[1]),那么max=x,也就是说把数值大的那个数组内元素的角标
给max,这时候max就不是0了,而是1.然后进入下一循环,x++,这时x为2,则有 如果arr[max](这里max已经为1了,也就是数组元素中的4)<arr[x](这里的 x 为2,也就是数组中的6),就把6在数组中的角标给max,依次类推。也就是说,这样循环下来,max存的是数组内最大的那个元素的角标,而不是0。除非第一个数值就是最大的,如int [] arr={8,6,4,2};这样的话,arr[max]=arr[0]。   希望没有越说越乱哦。。。
}
}
         


作者: 王亚男    时间: 2011-12-15 22:37
本帖最后由 qwert 于 2011-12-15 22:50 编辑

int max = 0 ,首先你需要明白的就是max身为角标,它的初始化值为0,也就是说是arr[0];
如果有数组int[] arr = {2,4,6,8};
这时arr[max](这里的max还是0)初始化就是数组内第一个元素,也就是arr[0],也就是数组内的2。
然后是循环体
for(int x=1;x<arr.length;x++)
{
   if (arr[max]<arr[x]; //你可以先理解第一个循环。首先,这里我们知道max的值为0,x的值为1,也就是说if (arr[0]<arr[1]),那么max=x,也就是说把数值大的那个数组内元素的角标
给max,这时候max就不是0了,而是1.然后进入下一循环,x++,这时x为2,则有 如果arr[max](这里max已经为1了,也就是数组元素中的4)<arr[x](这里的 x 为2,也就是数组中的6),就把6在数组中的角标给max,依次类推。也就是说,这样循环下来,max存的是数组内最大的那个元素的角标,而不是0。除非第一个数值就是最大的,如int [] arr={8,6,4,2};这样的话,arr[max]=arr[0]。   希望没有越说越乱哦。。。
}
}
         
晕死,刚才卡了,连着发了两次。。请斑竹大人帮我删一个。。。




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