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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨千里 中级黑马   /  2012-9-7 18:51  /  2772 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨千里 于 2012-9-15 13:21 编辑

int [][] arr = new int [5][];
定义一个二维数组,长度为5,即二维数组中有5个小数组,每个小数组的长度为?哦,没有长度。
大家都知道数组中的每一个元素,角标上的值都默认为0,

为什么 arr[0]的结果不是0?


看了半天的视频了,有点不明白,做会其他的事情,回来看答案,谢谢



         

评分

参与人数 1黑马币 +3 收起 理由
唐志兵 + 3 赞一个!

查看全部评分

11 个回复

倒序浏览
arr[0]是第一个数组的起始地址,arr[0][0]才是数组里的第一个值。
回复 使用道具 举报
本帖最后由 冯培军 于 2012-9-7 19:19 编辑

举例:int类型的二维数组:int a[][] = {{1,2}, {3,4,5,6}, {7,8,9}};
     二维数组可看成以数组为元素的数组。
        java中多维数组的声明和初始化应按从高位到低位的顺序进行,如:
        方法(1);
        int a[][] = new int[3][];
        a[0] = new int[2];
        a[1] = new int[4];
        a[2] = new int[3];//正确
        int t[][] = new int[][4];//非法
        方法(2);
        int a[][] = new int[3][5];//正确,定义一个三行五列的二维数组。



回复 使用道具 举报
之前有个相似的帖子,你看了应该就懂了:http://bbs.itheima.com/thread-24256-1-1.html
回复 使用道具 举报
二维数组
        A:数组中的数组。
                其实就是一维数组中的每一个元素是一维数组。
        B:二维数组的格式
                ***int[][] arr = new int[3][2];
                ***int[][] arr = new int[3][];
                ***int[][] arr = {{12,34,45},{44,67},{98}};
        C:二维数组的遍历
                public static void printArray2(int[][] arr)
                {
                        for(int x=0; x<arr.length; x++)
                        {
                                for(int y=0; y<arr[x].length; y++)
                                {
                                        System.out.print(arr[x][y]+"  ");
                                }
                                System.out.println();
                        }
                }
        D:二维数组应用(重点)
                二维数组的应用:
                一年12个月,每个月的销售额是xx万元.求一年的销售总额.
                春季:11 23 34
                夏季:45 87 79
                秋季:35 23
                冬季:25

                用二维数组描述并求一年的销售总额.

                注意特殊写法情况:
                int[] x,y[];
                int[] x;
                x是一个一维数组
                int[] y[];
                y是一个二维数组
回复 使用道具 举报
在二维数组arr[i][j]中类比C语言,二维数组a[0]相当于指向第一行的指针是一个地址值。
回复 使用道具 举报
二维数组可以理解为一个数组中的元素还是数组类型,数组是引用类型,由于你并没有对数组中的数组进行初始化,引用类型的默认初始化值为null,所以输出null
回复 使用道具 举报
arr[0]是地址值,而arr[0][0]才是二维数组的第一个元素。
回复 使用道具 举报
int[][] arr = {{1,2,3},{3,4,5}}; 二维数组,即x轴,y轴来确定一个“坐标”(x,y,z)理解,即具体数值。这个数表示两行三列,看看输出结果!
System.out.println("arr="+arr.length);  arr=2,表示那个“行”
System.out.println("arr[0][0]="+arr[0][0]);  arr[0][0]=1,数组从0角标计数,表示1,这个1表示由(x,y,z)三个数来指定一个位置
System.out.println("arr[0]="+arr[0]);   arr[0]=[I@14318bb,这个值就无法判定,就会输出x的值[i(表示)  这是在哪里学的我忘了,抱歉实在是想不起来了。

二维数组就是几行几列!(数组的定义)
1.声明:int[] arr;
2.实例化:arr = new Int[5];
1.2合并:int[] arr = new int[5];
声明实例化、赋值合并;

int[][] arr = {{1,2,3},{3,4,5}}

我在用你的列子来说明,
int [][] arr = new int [5][]; 实例化数组
arr ={{1,7},{2,3,4},{3,7},{4,8,9,10},{2,1,3}}; 这就是赋值,而且你申明的数组没有初始化列,所以里面的列是不固定的,而行就是5。
如果你不做赋值,你想要取到哪个值就会抛空指针异常的!


我感觉你是没有理解数组的实例化和赋值!所以会蒙的!
回复 使用道具 举报
陈振兴 发表于 2012-9-11 00:46
int[][] arr = {{1,2,3},{3,4,5}}; 二维数组,即x轴,y轴来确定一个“坐标”(x,y,z)理解,即具体数值。这 ...

哦 多谢  现在 知道了
回复 使用道具 举报
问题已经解决
回复 使用道具 举报
首先arr[0]并不是一个数组元素,而是一个一维数组。所以,输出arr[0]时,不会输出0.
其次,数组属于引用数据类型,所以,对一个二维数组arr[5][] ,打印arr[0]会输出null.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马