简单的数组问题
给我讲讲程序:
public class ArrayElementAngle {
public ArrayElementAngle() {
}
public static void main(String[] args) {
int mArray[][] = new int[5][];
int nCounter = 1;
for(int m = 0;m<mArray.length;m++){
for(int n= 0;n<mArray.length;n++)
mArray[m][n] = nCounter; //好象是这句有问题。
nCounter++;
}
for(int m = 0;m<mArray.length;m++){
System.out.println("第"+m+"行->");
for(int n = 0;n<mArray[m].length;n++)
System.out.println(" "+mArray[m][n]+" ");
System.out.println("\n");
}
}
}
编译通过,CLASS,CLASSPATH设置都正确。(JDK1。4)
错误信息:
Exception in thread "main" java.lang.NullPointerException
at ArrayElementAngle.main(ArrayElementAngle.java:11)
问题点数:20、回复次数:11Top
1 楼liushaohui(巴乔)回复于 2002-07-03 15:56:35 得分 3
int mArray[][] = new int[5][];
为
int mArray[][] = new int[5][5];
Top
2 楼bigchina001(一瓢道长)回复于 2002-07-03 16:03:05 得分 2
将int mArray[][] = new int[5][];改为int mArray[][] = new int[5][5];
因为java不支持动态数组,如果你想使用一个动态大小的数组,可以考虑用向量。Top
3 楼zwp315(城市大嫖客)回复于 2002-07-03 16:16:04 得分 0
为什么int mArray[][] = new int[5][3];不行?Top
4 楼hardtoreg(柱子)回复于 2002-07-03 16:21:05 得分 2
你定义的二维数组可以看作是包含5个数组的数组,而每个数组大小可以不同,但必须是已存在的,也就是说你只定义了一个可以放5个数组的数组,但里面却一个数组都没放。这才会出现NullPointerException。根据你的程序来看,还是用Vector吧,它可以任意增加,删除元素。Top
5 楼zwp315(城市大嫖客)回复于 2002-07-03 16:24:34 得分 0
本来我是想实现:
第0行
1
第1行
2 3
。
。
第4行
11
12
13
14
15
可现在的结果是
1 2 3 。。。。。。20Top
6 楼knight_qmh(辉)回复于 2002-07-03 16:24:34 得分 1
等于多少都没关系,关键在
for(int n= 0;n<mArray.length;n++)
定义的数组中不能大于mArray.lengthTop
7 楼nichole()回复于 2002-07-03 16:41:46 得分 1
要是一定要这样可以在输出时控制Top
8 楼ddtqfly(风语无阻)回复于 2002-07-03 16:58:15 得分 1
同意bigchina001(幽谷清风)的
Top
9 楼eyeieye(魔之眼)回复于 2002-07-03 17:18:02 得分 6
搞什么搞
public class ArrayElementAngle {
public ArrayElementAngle() {
}
public static void main(String[] args) {
int mArray[][] = new int[5][];
int nCounter = 1;
for(int m = 0;m<mArray.length;m++){
mArray[m] = new int[m+1];
for(int n= 0;n<=m;n++) {
mArray[m][n] = nCounter;
nCounter++;
}
}
for(int m = 0;m<mArray.length;m++){
System.out.println("第"+m+"行->");
for(int n = 0;n<mArray[m].length;n++)
System.out.println(" "+mArray[m][n]+" ");
System.out.println("\n");
}
}
}
Top
10 楼eyeieye(魔之眼)回复于 2002-07-03 17:19:26 得分 0
教人之前自己最好想清楚了,误人子弟Top
11 楼wu4long()回复于 2002-07-03 18:11:38 得分 4
eyeieye(魔之眼)说的没错!
上面的问题的根源在于对Java的多重数组的理解,Java没有C++的多重数组的概念。但为了一些人的习惯,也可用m[][]来表示二维数组。
在Java中,对于每个对象来说都必须new来生成空间。
下面我简要分析一下前面的问题:
int mArray[][] = new int[5][];
上面一句定义了一个"二维数组",其实这就是一个一维向量数组。上面只是生成了5个向量元素的空间。而对于每个向量元素的空间还没分配。所以:
mArray[m][n] = nCounter;
就产生了问题。
正确的方法eyeieye(魔之眼)已经写出来了。
Top




