黑马程序员技术交流社区

标题: 菜鸟小问题 [打印本页]

作者: 石头    时间: 2011-10-30 17:25
标题: 菜鸟小问题
class Demo3
{
        public static void main(String[] args)
        {
            int x[]={110,92,40,94,95,96,97,98,99,120};
            int max=x[0];
            for (int i=0;i<x.length ;i++ )
             {
                  if (max<x[i])
                   {
                max=x[i];
                   }
            }
                System.out.println("最高分:"+max);
        }
}

这其中int i=1跟int i=0的区别是什么??为什么最终的结果是一样的
作者: 陆华山    时间: 2011-10-30 17:41
如果最大数出现在第一个就不对了,你那个是角标int i=1 这个不全面
作者: 王德云    时间: 2011-10-30 17:47
你关健是要理解这段代码, 学会编程思想才是最重要的。如果int i=1;那if (max<x[i]),那就直接与第二个数比了,如果第一个数是最大的数,那你就求不出最大的数。建议你去看一下毕老师的视频!


作者: 石头    时间: 2011-10-30 17:47
陆华山 发表于 2011-10-30 17:41
如果最大数出现在第一个就不对了,你那个是角标int i=1 这个不全面

int x[]={150,92,40,94,95,96,97,98,99,120};
我把最大数放在第一个,
这时int i=1,   结果最大数150, 我就搞不懂了。
作者: o火o把o    时间: 2011-10-30 17:47
本帖最后由 郭龙华 于 2011-10-30 17:50 编辑

int i=1 的话,x[0]就不会参与比较了~
既然max就等于x[0], 那就不用和自己比较啦~所以结果一样~
作者: 石头    时间: 2011-10-30 17:53
郭龙华 发表于 2011-10-30 17:47
int i=1 的话,x[0]就不会参与比较了~
既然max就等于x[0], 那就不用和自己比较啦~所以结果一样~ ...

嘿嘿,明白了。。谢谢。。
作者: 肖居上    时间: 2011-10-30 17:55
int i=0;是从数组的第一位开始比较,int i=1是从数组的第二位比较,一样的原因是因为你让 int max=x[0];那么当int i=1时,虽然循环时跳过了数组的第一位但max就是数组的第一位,正好弥补了这一漏洞,但当你把int max=x[0]改为 int max=0; for (int i=0;i<x.length ;i++ )改为int i=1循环时时,如果这时x[0]=130的话,那结果就错了
作者: 黄晓天    时间: 2011-10-30 18:23
具体的问题具体分析,int x=0是从数组的第一个元素开始比较,而int x=1则是从数组的第二个元素开始比较,但是因为你假设max=x[0],所以,int x=0和int x=1结果就相同了。但若你的max假设不是x[0]的话,而x=1;你就漏掉了比较x[0]了,但正好x[0]就是该数组中的最大值的话,那么结果就不对了!
作者: 张晨    时间: 2011-10-30 18:52
这个程序目的是找最大值,如果X[]数组第一个就是最大值的话 x=0和x=1的结果就不一样了,所以遍历的时候一定要全面
作者: 白倩    时间: 2011-10-30 21:33
int i=0是从数组的第一个元素x[0]开始比较,int i=1 的话,x[0]就不会参与比较了,x=0比x=1多比较了一次;
作者: 邱本超老师    时间: 2011-10-30 22:18
如果是int i=1的时候if (max<x[i]),就直接与第二个数比了,如果第一个数为最大数,那你是比不出最大数的。
作者: 秦冲    时间: 2011-10-30 22:26
N个数比较大小,思路:首先假设第一个数为最大的,然后依次比较余下的N-1个数,如果有比我假设的这个数还大的数,那么将将最大值变为这个数,所以你从int i= 1(第二个数)开始比较也是可以的。第一个数你已经假设为最大了,可以省去比较。
作者: wsssx    时间: 2011-10-31 08:08
提示: 作者被禁止或删除 内容自动屏蔽
作者: 刘永昌    时间: 2011-10-31 08:46
这问题好回答,有关数组的运算里有一个很经典的说法-------遍历
从你的代码可以看到你的编程思想:先定义一个max值,然后与数组里的每一个成员比较,若有比max值大的,那么max取其值。而你用那个for循环就是用于遍历数组的,数组角标是从0开始,若i=1,而正好第一个元素最大,那么遍历时会漏掉第一个,你的结果只能是数组里的那个第二大的数了
作者: 刘永昌    时间: 2011-10-31 08:47
这问题好回答,有关数组的运算里有一个很经典的说法-------遍历
从你的代码可以看到你的编程思想:先定义一个max值,然后与数组里的每一个成员比较,若有比max值大的,那么max取其值。而你用那个for循环就是用于遍历数组的,数组角标是从0开始,若i=1,而正好第一个元素最大,那么遍历时会漏掉第一个,你的结果只能是数组里的那个第二大的数了
作者: 刘福双    时间: 2011-10-31 09:44
你定义了  int max=x[0]; 而且循环时从0开始等于自己和自己比较(无意思),从1开始比较是和下一个数组进行比较。所以0和1的结果是一样的。
建议用Arrays.sort();这是java里给的包,需要导入import java.util.Arrays;能快速实现数组最大值。





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