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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© @ne_pie尒ce 中级黑马   /  2013-11-6 13:17  /  1563 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 @ne_pie尒ce 于 2013-11-6 13:19 编辑

基础测试小问题

problem.png (80.45 KB, 下载次数: 28)

problem.png

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

9 个回复

倒序浏览
对二维数组进行双层for循环,里外的角标要区分清楚。
外层为arr.length没错,但是到了里层后,就是属于arr[i]的一维数组循环了,
此时你使用的依然是arr.length,它的长度为3,而arr[i]的长度都是2,自然会角标
越界了,只需要把里层循环的判断条件改为arr[i]就好了。
回复 使用道具 举报
不能用arr.length作为二位数组的循环控制量
回复 使用道具 举报
RuntimeError! 发表于 2013-11-6 13:36
不能用arr.length作为二位数组的循环控制量

你这答复的也太不负责了。。。
arr.length是可以作为二维数组的循环控制量的,它表示的是
这个二维数组的里面有多少个一维数组。
RuntimeError...
回复 使用道具 举报
doitforyou 发表于 2013-11-6 13:53
你这答复的也太不负责了。。。
arr.length是可以作为二维数组的循环控制量的,它表示的是
这个二维数组的 ...

嗯我记得也是这样的  可是刚才敲一个程序和我想的不一样,,,不小心ctrl+enter发出去了- -
原来是打错了。。。弄好了现在- -
回复 使用道具 举报
那个异常 是角标越界的异常。代码要修改一下:
/*
                 * 总的来说,这两个for的作用就是遍历一个二维数组。
                 * arr.length 表示 arr 的长度,即arr 的元素个数。
                 * 这里arr是二维数组,所以它的元素是数组。
                 */
                for(int i = 0; i < arr.length; i++) {
                        /*
                         * arr[i].length 表示arr中第i个元素的长度,因为arr是二维数组。
                         */
                        for(int j = 0; j < arr[i].length; j++) {
                                if(arr[][] < min)
                                        min = arr[i][j];
                        }

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
内部循环控制语句错了。
外循环控制数组的行数 所以用 arr.length是对的。
内循环控制数组的列数 所以应该指定当前数组行数的列数,应该用 arr[i].length

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
这个例子里面的arr可以表示为
6  2
3  7
4  5
是一个3行2列的2维数组
而arr.length的值是3,超过了列数。
而两层循环体是分别根据1维数组个数和对应1维数组内元素个数来决定循环次数的,所用<arr.length来控制重复次数会越界的。
所以循环体可以写成;
for(int i=0;i<arr.length;i++)
{
    for(int j=0;j<arr[i].length;j++)
   {
   if(arr[][]<min)
        min=arr[][];
   }
}

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
内循环for(int j=0;j<arr.length;j++)   //错误的长度,arr.length是整体二维数组长度

改为:for(int j=0;j<arr[i].length;j++) //这样是自动检测每个一维数组的长度就不会出现越界了
回复 使用道具 举报
class Teat0 {
        public static void main(String[] args) {
                int [][] arr = {{6,2},{3,7},{4,5}};
                int min = getMin(arr);
                System.out.println(min);
        }
        public static int getMin(int[][] arr){
        int min =arr[0][0];
        for (int x = 0;x<arr.length ;x++ ) {
                for (int y = 0;y<arr[x].length ;y++ ) {
                        //注意内层y的范围是arr[x].length
                        if (arr[x][y]<min) {
                                min = arr[x][y];
                        }
                }
        }
        return min;
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马