当前位置: 代码迷 >> Java相关 >> 2维数组的问题
  详细解决方案

2维数组的问题

热度:91   发布时间:2006-09-18 10:39:17.0
2维数组的问题
我想大家都知道数组附值
程序代码:

String[] s = {\"a\",\"b\"};

以上代码是没有问题的。

那么来看一下以下代码
程序代码:

public class Test {
public static void main (String[] args) {
String[][] str = new String[4][];

// str[0] = {\"a\",\"b\"};

str[0] = new String[2];
str[0][0] = \"a\";
str[0][1] = \"b\";
}
}


类中注释掉的那句报错,只能用下面的那种语句进行附值,那么注释掉的那句跟上面的代码有何不同?为何会报错?
搜索更多相关的解决方案: 语句  注释  

----------------解决方案--------------------------------------------------------

如果改成str[0]=new String[]{"a","b"};
就不会报错了.
因为数组是不可变的,除非你为它重新分配内存空间
一开始str就被声明为一个二维的数组,这时,只是把第一维声明为长度为4,而第二维却没有声明
这个时候要为第二维赋值就必须为它 new一个空间出来,而不能直接把数组的内容写入它里面
你这个试试,是可以通过的
String[] other={"a","b"};
str[0]=other;


----------------解决方案--------------------------------------------------------
如果你再对other或者str[0]赋值你就只能根据下标来赋了
不能再用大括号来赋了
other={"aa","bb"};
这样会报错,但是如果
other=new String[]{"aa","bbb"};
这样却不会报错,因为new字告诉编译器,要重新分一块内存给other数组用了
所以,它可以再定大小
----------------解决方案--------------------------------------------------------

原来这样的啊,我以为根据定义1维数组那样就可以了。。
但我String[][] str = new String[4][5];这样定义后,str[0] = {"a","b"};这样还是会报错呢……难道说这样的分配空间还是不行?


----------------解决方案--------------------------------------------------------
以下是引用飘飘叶子在2006-9-18 12:25:17的发言:

原来这样的啊,我以为根据定义1维数组那样就可以了。。
但我String[][] str = new String[4][5];这样定义后,str[0] = {"a","b"};这样还是会报错呢……难道说这样的分配空间还是不行?

这样当然还会报错,因为你已经给你的第二维数组定义为长度为5了,
向大括号的赋值方法只能用于刚刚申请空间的时候赋值


----------------解决方案--------------------------------------------------------

也就是说str[0] = {"a","b"};这个只能用在1维数组的附值上……
明白了……谢谢~


----------------解决方案--------------------------------------------------------

真的受教了
非常感谢二位


----------------解决方案--------------------------------------------------------
以下是引用飘飘叶子在2006-9-18 13:08:30的发言:

也就是说str[0] = {"a","b"};这个只能用在1维数组的附值上……
明白了……谢谢~

二维也能赋的
String[][] str={{"a","b"},{"ab","cd"}};


----------------解决方案--------------------------------------------------------
  相关解决方案