黑马程序员技术交流社区

标题: 说好的有初始化值呢 [打印本页]

作者: 范国征    时间: 2014-4-17 09:41
标题: 说好的有初始化值呢
http://bbs.itheima.com/forum.php?mod=attachment&aid=Mzg3NzN8OGQyM2U5YjI4YzhmZWNmMDRlZDU4NWYyNjZhNzUwMWF8MTczMTI1NDg0Mw%3D%3D&request=yes&_f=.jpg

求解:不是说有默认初始化值么?为什么是这样的?:(

shang.JPG (84.13 KB, 下载次数: 48)

shang.JPG

作者: 月光海    时间: 2014-4-17 09:47
就是这样的啊,3行代表的是外面的for循环结果,一共3次,每一行的数据量是根据你里面的数组的长度的打印的啊,你里面只有3个或者2个,你怎么能要求别人打印4个值呢
作者: kuroro自走核炮    时间: 2014-4-17 09:48
本帖最后由 kuroro自走核炮 于 2014-4-17 09:52 编辑

子数组的长度在你声明的时候就已经定下了啊……
所以你看里面那层的循环。
j<a.length 第一个子数组的长度是3,也就是说这个循环完成0 1 2三个角标位置之后就满足了j<a.length这个条件,循环结束。跳出进行了第二个子数组的循环了。所以第一行第四个结果必然是空位。
要注意,java里二维数组中的各个数组长度可以不一样的!

作者: 491138002    时间: 2014-4-17 09:52
你已经初始化了,所以不会有默认初始化了
作者: anqi    时间: 2014-4-17 10:04
我仔细看了看的的问题,你2维数组理解错误了。
2维度数组不一定是对称的数组
int[][]  a={{1,2,3}{4,5}{6,7,8,9}}实际的意思是一个数组里面有三个元素,这个三个元素都是数组。
和int[] a={b1,b2,b3 };b1={1,2,3};
b2{4,5};
b3{6,7,8,9}都分别是数组是一样的.
2维数组第一维度存的都是引用,所元素自身的长度可以不同。



作者: ⒈心只霸占沵    时间: 2014-4-17 10:13
  1. int[][] a={{1,2,3},{4,5},{6,7,8,9}};
复制代码

这句代码定义的是一个二维数组     就是一个长度为3的数组,数组中的三个元素都为数组类型
元素0  即a[0]={1,2,3}
元素1  即a[1]={4,5}
元素2  即a[2]={6,7,8,9}
所以你遍历的时候是
   1 2 3      a[0]是子数组,子数组中本来就只有三个元素 下面同理
   4 5
   6 7 8 9
作者: lzhuas    时间: 2014-4-17 10:32
你这样做是得不到你要的,要是你非得要你想要的结果就把int[][] a = {1,2,3},{4,5},{6,7,8,9};改成
int[3][4] a = {1,2,3},{4,5},{6,7,8,9};
这样它里面没有数值得就会有默认初始化的值。

作者: 创造命运    时间: 2014-4-17 14:15
呵呵,楼主的问题我试了一下看看能不能以第二种方式打印,最终还是解决不了。
不过我发现了几点问题,代码如下:
public class Test
{
        public static void main(String[] args)
        {
                int[][] a = {{1,2,3}, {4,5}, {6,7,8,9}};

                /*for (int i = 0; i < a.length; i++)
                {
                        for (int j = 0; sizeof(a[i])/sizeof(Integer); j++)
                        {
                                System.out.print(a[i][j]+"\t");
                        }
                        System.out.println();
                }*/
                System.out.println(a[1][2]);
        }
}

1.我原本还想着Java里有跟C语言里一样的sizeof()方法。后来知道没有。上网查了一下,也没找到在java中实现类似sizeof()方法的办法。
那么java中可以实现类似sizeof()的功能吗?怎样实现?

2.我试着打印数组里某个元素的值。System.out.println(a[1][2]);,如果在C里,可以确定输出的结果是0。但是这里运行时却报了异常:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2。访问数组越界。这说明一个问题:int[][] a = {{1,2,3}, {4,5}, {6,7,8,9}};该数组创建以后,并不是像C语言那样有三行四列,而是每一行的列数都是不同的。分别是:3列,2列,4列。
是不是可以这样理解:int[][] a = {{1,2,3}, {4,5}, {6,7,8,9}};数组a创建后,在内存里不存在a[0][3],a[1][2],a[1][3]这三个元素。那么数组a的大小应该是4*9=36个字节,不是4*12=48个字节。对吗?


作者: 小歪    时间: 2014-4-17 14:27
哥们,你的问题出在:
    你把所有的二维数组都当方阵来看了吧,可能是因为你经常先定义后赋值的习惯造成;
    你要明白   int[][] a={{1,2,3},{4,5},{6,7,8,9}};  它在定义是就只有9个内存存储单元,而不是12个
作者: 范国征    时间: 2014-4-17 15:00
小歪 发表于 2014-4-17 14:27
哥们,你的问题出在:
    你把所有的二维数组都当方阵来看了吧,可能是因为你经常先定义后赋值的习惯造成 ...

嗯。是这样的,非常感谢!!!:)
作者: 范国征    时间: 2014-4-17 15:02
lzhuas 发表于 2014-4-17 10:32
你这样做是得不到你要的,要是你非得要你想要的结果就把int[][] a = {1,2,3},{4,5},{6,7,8,9};改成
int[3][ ...

是自己没有理解透彻,非常感谢。嘿嘿
作者: 范国征    时间: 2014-4-17 15:03
⒈心只霸占沵 发表于 2014-4-17 10:13
这句代码定义的是一个二维数组     就是一个长度为3的数组,数组中的三个元素都为数组类型
元素0  即a[0]= ...

感谢。感谢:loveliness:




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