黑马程序员技术交流社区

标题: 关于二维数组初始化赋值的小问题,求大神指点 [打印本页]

作者: Michael_xpd    时间: 2013-9-7 18:14
标题: 关于二维数组初始化赋值的小问题,求大神指点
本帖最后由 Michael_xpd 于 2013-9-7 19:36 编辑

求指点,小弟是菜鸟

PrintArray.png (21.2 KB, 下载次数: 27)

为什么我这样为数组初始化赋值不行?

为什么我这样为数组初始化赋值不行?

作者: 李锡碧    时间: 2013-9-7 18:23
数组是引用类型变量   定义变量时,仅仅表示一个引用变量(也就是定义了一个指针),这个引用变量还未指向任何有效的内存,因此定义数组是不能指定数组的长度。
附加的:
而且由于定义数组仅仅只是定义了一个引用变量,并还未指向任何有效的内存空间,所以还没有内存空间来存储数组元素,所以,这个数组也不能使用,要对数组进行初始化才可用。
作者: 张聪珉    时间: 2013-9-7 18:26
视频坚持看完,回过头来,问题也会变简单的,首先在创建一个二维数组的时候,你定义了二维数组长度为3,也就是说,这个二维数组里面有三个元素,每个元素是一个一维数组,而这些一维数组的长度为0或者理解为空null,既然是长度为0的数组,那就肯定不能赋值了,因为数组长度是固定的,不能添加超过数组长度的元素,所以编译会失败
作者: Michael_xpd    时间: 2013-9-7 18:34
张聪珉 发表于 2013-9-7 18:26
视频坚持看完,回过头来,问题也会变简单的,首先在创建一个二维数组的时候,你定义了二维数组长度为3,也 ...

嗯,非常感谢。那我要怎么定义二维数组,我才能为一维数组赋值呢?我的下面的分别为一维数组赋值的语句才能通过编译呢?
作者: 张聪珉    时间: 2013-9-7 18:57
Michael_xpd 发表于 2013-9-7 18:34
嗯,非常感谢。那我要怎么定义二维数组,我才能为一维数组赋值呢?我的下面的分别为一维数组赋值的语句才 ...

如果你的数组长度是固定的,就可以在创建的时候指定数组长,如果不固定,那就可以这样创建int[][] arr={{1,2,3},{4,5},{6}}


作者: 辛春鹏    时间: 2013-9-7 18:58
  1. class PrintArray
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[][] arr=new int [3][];
  6.                 arr[0]=new int[]{1,2,3};
  7.                 arr[1]=new int[]{4};
  8.                 arr[2]=new int[]{5,6};
  9.                 for(int x=0;x<arr.length;x++)
  10.                 {
  11.                         for(int y=0;y<arr[x].length;y++)
  12.                         {
  13.                                 System.out.print(arr[x][y]+",");
  14.                         }
  15.                 }
  16.                
  17.                
  18.                 System.out.println("这就是一个二维数组!");
  19.         }
  20. }
复制代码
要这样写的啊,楼主。没有你那种初始化的方式的。你需要为那三个一维数组开辟内存空间的。这种定义二维数组的方式是动态的初始化。

作者: Fire_Leg    时间: 2013-9-7 19:08
其实一维二维数组可以看做是一种类,你在初始化的时候就像new一个对象。所以你的防辐射应该加上 int []
作者: Michael_xpd    时间: 2013-9-7 19:33
辛春鹏 发表于 2013-9-7 18:58
要这样写的啊,楼主。没有你那种初始化的方式的。你需要为那三个一维数组开辟内存空间的。这种定义二维数组 ...

嗯嗯!知道了!谢谢!
作者: Michael_xpd    时间: 2013-9-7 19:34
Fire_Leg 发表于 2013-9-7 19:08
其实一维二维数组可以看做是一种类,你在初始化的时候就像new一个对象。所以你的防辐射应该加上 int [] ...

嗯嗯!谢谢!
作者: Michael_xpd    时间: 2013-9-7 19:35
张聪珉 发表于 2013-9-7 18:57
如果你的数组长度是固定的,就可以在创建的时候指定数组长,如果不固定,那就可以这样创建int[][] arr={{ ...

嗯嗯,这种方法我知道一定能行,谢谢哈!
作者: 王杰庆    时间: 2013-9-7 20:50
你其中的arr[0]相当于一个一位数组,不是二维数组的书写格式,若当一位数组使用且没有定义,无法通过编译!!
作者: 王杰庆    时间: 2013-9-7 20:50
你其中的arr[0]相当于一个一位数组,不是二维数组的书写格式,若当一位数组使用且没有定义,无法通过编译!!




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