黑马程序员技术交流社区

标题: 关于数组问题 [打印本页]

作者: 杨千里    时间: 2012-9-7 18:51
标题: 关于数组问题
本帖最后由 杨千里 于 2012-9-15 13:21 编辑

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

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


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



         

作者: 孙岳    时间: 2012-9-7 18:58
arr[0]是第一个数组的起始地址,arr[0][0]才是数组里的第一个值。
作者: 冯培军    时间: 2012-9-7 19:17
本帖最后由 冯培军 于 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];//正确,定义一个三行五列的二维数组。




作者: 黑马_许芸    时间: 2012-9-7 19:25
之前有个相似的帖子,你看了应该就懂了:http://bbs.itheima.com/thread-24256-1-1.html
作者: 杨习平    时间: 2012-9-7 19:27
二维数组
        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是一个二维数组
作者: 乔九    时间: 2012-9-7 19:28
在二维数组arr[i][j]中类比C语言,二维数组a[0]相当于指向第一行的指针是一个地址值。
作者: 李秀昂    时间: 2012-9-7 19:31
二维数组可以理解为一个数组中的元素还是数组类型,数组是引用类型,由于你并没有对数组中的数组进行初始化,引用类型的默认初始化值为null,所以输出null
作者: 霍永刚    时间: 2012-9-7 21:32
arr[0]是地址值,而arr[0][0]才是二维数组的第一个元素。
作者: 陈振兴    时间: 2012-9-11 00:46
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:55
陈振兴 发表于 2012-9-11 00:46
int[][] arr = {{1,2,3},{3,4,5}}; 二维数组,即x轴,y轴来确定一个“坐标”(x,y,z)理解,即具体数值。这 ...

哦 多谢  现在 知道了
作者: 杨千里    时间: 2012-9-11 00:56
问题已经解决
作者: 赵家阳    时间: 2012-9-11 01:06
首先arr[0]并不是一个数组元素,而是一个一维数组。所以,输出arr[0]时,不会输出0.
其次,数组属于引用数据类型,所以,对一个二维数组arr[5][] ,打印arr[0]会输出null.




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