黑马程序员技术交流社区

标题: java多维数组 [打印本页]

作者: 禾呈    时间: 2013-7-2 08:42
标题: java多维数组
本帖最后由 杜光 于 2013-7-2 21:36 编辑

int[][] arr=new int[][];不被允许
int[][] arr=new int[2][];被允许
为何?

作者: 赵然    时间: 2013-7-2 09:01
java中没有像其他语言一样,有多维数组的类型,是因为java的多维数组都是看作数组的数组,比如说二维数组看作是一维数组的数组,即在一维数组中放数组。其他的同理。
一般只要在定义时候规定了第一个数组的维数就可以了,比如int [][] a = new int [2][];后面的不指定维数,java虚拟机就能运行成功。
int [][] a= new int [2][];可以写成 int[] a[] = new int [2][];也就是在a[]数组中放int[]数组。
此时在内存中就会先分配两块内存空间,而不会去管每一块里面如何再去分配,那是每一块内存自己的事。所以不是连续分配成连续的4个int空间,而是先创建2个int[]空间。然后每一个int[]空间再分别分配
作者: denghui1010    时间: 2013-7-2 09:18
你定义一个二维数组,二维数组的长度是要的,这个二维数组的长度就是2
int[][] arr = {{1},{1}};
这样是可以的,因为可以自动判断长度了

作者: 宋智超    时间: 2013-7-2 10:36
其实我觉得沙发说的很对,不过我还是有点想补充的。
刚查了下书,多维数组的初始化和一维数组类似分为两种:静态初始化和动态初始化。
静态初始化类似2楼所使用的,初始化时会给数组赋值。
动态初始化是为数组指定长度,在内存中申请空间。
而二维数组的动态初始化格式大致有三种:
1. 数据类型【】【】 数组名称=new 数据类型【一维长度】【二维长度】;
2. 数据类型【】【】数组名称;
3. 数组名称=new 数据类型【一维长度】【二维长度】;
可以看出楼主编译通过的是使用第一种初始化方式(二维长度可省),
若楼主想定义一个没有指定长度的二维数组应使用上述第二种定义格式,例如:int arr[][];

新手一枚,共同学习进步!

作者: 杜光    时间: 2013-7-2 10:45
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。
作者: 杜光    时间: 2013-7-2 10:52
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。
作者: 袁梦希    时间: 2013-7-2 12:34
加油  楼主
作者: 崔龙飞    时间: 2013-7-2 19:46
二维数组有两种初始化方式静态初始化和动态初始化;
静态初始化:int[][] arr = {{1,2,3},{4,5,6}}有三个一维数组,每个一维数组都已经初始化arr[1] = {1,2,3};arr[2] = {4,5,6};
                  指定每个数组元素的初始值,由系统决定数组长度。

动态初始化:int[][] arr = new int[2][];      有两个一维数组,没有初始化一维数组,默认值为null
                  程序员只指定数组长度,由系统为数组元素分配初始值。
所以:
int[][] arr=new int[][]不被允许,你没有给数组arr进行初始化,不管是动态还是静态的
int[][] arr=new int[2][];被允许 :你进行了动态初始化,指定了一维数组的个数,但是没有指定一维数组中元素的个数
作者: 崔龙飞    时间: 2013-7-2 19:48
杜光 发表于 2013-7-2 10:45
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。

我之前发的贴没办法改成已解决,就是在回复旁边没有那个编辑的功能,怎么办?多谢
作者: 杨兴庭    时间: 2013-7-2 21:39
崔龙飞 发表于 2013-7-2 19:48
我之前发的贴没办法改成已解决,就是在回复旁边没有那个编辑的功能,怎么办?多谢 ...

把帖子的链接发给版主,版主会帮你改的,,,,
杨兴庭(632763270) ,   巩建(496854761),赵海洋(294124360),
万琪(382968310),杜光(56402344)
希望可以帮到你。。。。。

-------------------坚持学习,黑马因你而精彩---------------




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