黑马程序员技术交流社区

标题: 为什么红色部分的i要小于arr.length-1? [打印本页]

作者: 不羁的风1230    时间: 2014-5-11 21:55
标题: 为什么红色部分的i要小于arr.length-1?
class Day06_06 {
        public static void main(String[] args) {
                int arr[][]={{1,2,3,4},{2,3,4,5},{4,5,6,7}};
                arr(arr);
        }
        /*
        求二维数组的最大值;
          无需返回值;
          定义一个二维数组;
        */
        public static void arr(int[][] arr){
                int i=0;
                int j=0;
        for (i=0;i<arr.length-1;i++ ) {
                for ( j=0 ;j<arr.length-1 ;j++) {
                        if(arr[0][0]<arr[j])
                        {
                                arr[0][0]=arr[j];
                        }
                }
        }System.out.println("i="+i+" j="+j+" max="+arr[j]);
        }
}

作者: 姜蕾蕾    时间: 2014-5-12 00:27
数组的下标是从0开始计数的,比如你要把一个长度为10的字符串放到一个长度为10的数组中,是不是应该是0-9就够了?那么也就是length-1,对吧?
作者: jsjchenlong    时间: 2014-5-12 01:22
这个就是因为数组的下标是0到数组长度减去1,那么你在遍历数组的时候是不是要把每个数都要进行比较啊,那么首先你要保证你的角标对应的数据存在啊,如果你不减去1的话,那么角标是不是就越界了。
作者: lvc    时间: 2014-5-12 02:26
数组下标是从0开始的,长度是从1开始的。所以要减一。

作者: 张斌    时间: 2014-5-16 09:15
首先这样想; 二为数组有行有列    int arr[][]={{1,2,3,4},{2,3,4,5},{4,5,6,7}};
这个在实际中就好像   是这样排列的   列角标位  0 1 2 3
                                                    行 角标 位    0   {1.2.3.4}
                                                                         1   {2.3.4.5}
                                                                         2    {4.5.6.7}
先要arr.length-1 算出二位数组的最大角标 也就行角标  在arr.length-1 算出一行的最大角标,要循环就行,一行里面循环几次
作者: wy_heima    时间: 2014-5-16 10:00
姜蕾蕾 发表于 2014-5-12 00:27
数组的下标是从0开始计数的,比如你要把一个长度为10的字符串放到一个长度为10的数组中,是不是应该是0-9就 ...

他用的是小于号,也就是取不到9,所以只有0~8,这9个数,个人认为此代码错误
作者: wy_heima    时间: 2014-5-16 10:15
class Day06_06 {
         public static void main(String[] args) {
                 int arr[][]={{1,2,3,4},{2,3,4,5},{4,5,6,7}};
                 arr(arr);
         }
         /*
         求二维数组的最大值;
          无需返回值;
          定义一个二维数组;
        */
         public static void arr(int[][] arr){
                 int h=0;
                 int l=0;
         for (int i=0;i<arr.length;i++ ) {
                for ( int j=0 ;j<arr[i].length ;j++) {
                         if(arr[h][l]<arr[i][j])
                         {
                                 h=i;
                                                                 l=j;
                                                                 
                         }
                 }
                        }System.out.println("i="+h+" j="+l+" max="+arr[h][l]);
         }
}

作者: wy_heima    时间: 2014-5-16 10:16
wy_heima 发表于 2014-5-16 10:15
class Day06_06 {
         public static void main(String[] args) {
                 int arr[][]={{1, ...

这样可以得到题目想要的结果
作者: 姜蕾蕾    时间: 2014-5-16 11:00
wy_heima 发表于 2014-5-16 10:00
他用的是小于号,也就是取不到9,所以只有0~8,这9个数,个人认为此代码错误 ...

这是谁写的,不得不承认LZ是对的……:L




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