java关于二维数组分配空间

int s [][]={{1,2},{3,4,5},{6,7,8,9}};
问题1:假设有题,int s[][] 方括号内该填多少?
我的答案是[3][4]是否正确?.
问题2.假设int s[][]=new int[3][4];
那么:
System.out.println(s.length);//3
System.out.println(s[0].length);//4
System.out.println(s[1].length);//4
System.out.println(s[2].length);//4
输出3 4 4 , 也就是说分配了三行:s[0]、s[1]、s[2]
每行又分配了4个空间如:s[0]->s[0][0]、s[0][1]、s[0][2]、s[0][3]
例如:我为数组赋值->s[0][0]=1、s[0][1]=2 ,但不为s[0][2]赋值 ....
我可以获取到System.out.println(s[0][2])//输出为0;
那么换一种形式输出的结果完全不同int s [][]={{1,2},{3,4,5},{6,7,8,9}};
System.out.println(s.length);//输出3
System.out.println(s[0].length);//输出2
System.out.println(s[1].length);//输出3
System.out.println(s[2].length);//输出4
System.out.println("看是否分配空间");
//System.out.println(s[0][2]);//这句报错,溢出
System.out.println(s[1][2]);//这句是5
System.out.println(s[1][3]);]);//这句同样报错,溢出
是否可以理解为两种形式分配存储方式也不同呢?
换句话说:
int s [][]={{1,2},{3,4,5},{6,7,8,9}} 不等于 int s[][]=new int[3][4];
内存中为这种方式int s [][]={{1,2},{3,4,5},{6,7,8,9}} 的分配方式如下?
s[0] ->s[0][0](1) s[0][1](2)
s[1] ->s[1][0](3) s[1][1](4) s[1][2](5)
s[2] ->s[2][0](6) s[2][1](7) s[2][2](8) s[2][3](9)
那么int s[][]->第一个[]填3,因为是分配来三个数组,第二个[]该填多少?2 、3、4?填4的话可以取到第一个数组的3、4位为0.可实际是将这种方式变为{1,2,0,0}...与本身问题不符,原本程序是无法得到该值的,证明是错误的。填2的话第二第三个数组肯定会溢出报错。

1.你的答案不正确,答案应该是[3][],(只填写一维的维数)
2.两种分配方式其实是相同的,都是先开辟内存空间,然后赋值。区别有两点,一是在于何时赋值,第一种方式编程者没给赋值,但系统会默认赋值(默认值根据数据类型不同,赋的值也不同一般整形赋值0,浮点型赋值0.0),第二种是边分配边赋值。第二点区别是数组维数上的设定:int s[][]=new int[3][4];只要这样写,那么你数组的维数就确定了,他是一个3行4列的数组(注意,3行中每一行都有4个元素)。如果写成这样:int s [][]={{1,2},{3,4,5},{6,7,8,9}};那它就是一个3行X列的数组,X表示2、3、4,也就是说第1行有两个元素,第2行3个,第3行4个,不是规则的3行4列的了。
关于这两种方式输出结果,你第一种分析的正确。第二种形式,根据我上面说的,下面这四个输出你应该能理解:
System.out.println(s.length);//输出3
System.out.println(s[0].length);//输出2
System.out.println(s[1].length);//输出3
System.out.println(s[2].length);//输出4
下面分析下面的三行代码:
System.out.println(s[0][2]);//这句报错,溢出
这句的意思是输出第0行的第3个元素(没错,是滴3个元素,因为数组是从第0个元素开始的,所以2代表第3个元素),由于第0行只有2个元素,所以你这句有错。

System.out.println(s[1][2]);//这句是5
这句话是打印出第2行的第3个元素,确实是5

System.out.println(s[1][3]);]);//这句同样报错,溢出
这句话是打印出第2行的第4个元素,当然溢出了。
温馨提示:答案为网友推荐,仅供参考
相似回答