简单的算法题竟然报错了。。。。。而且还不知道怎么个错法,编译没错运行报错了!
public static void main(String[] args) {
final int n = 3;
int i,j, a[][] = null;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (i > j)
a[i][j] = (j + 1) / (i + 1);
else
a[i][j] = (i + 1) / (j + 1);
}
System.out.println(a);
}
}
}
数组的第一维大小不能为空,这里定义int a[][]=new int[n][n];即可。
Exception in thread "main" java.lang.NullPointerException
是这个异常吧 因为你在初始化数组的时候给它赋值是null 然后你却给它赋值 所以会报空指针
数组 长度是不可变的 你想动态初始化你就要给它定义长度
个人理解
int i,j, a[][] = null; //此处你只是申明了一个叫a且类型是int[][]的变量名而已,并未初始化内存空间,所以不能直接被赋值。抛出NullPointerException
a[i][j] = (j + 1) / (i + 1);
这是整除
定义出错,可以多个定义,但是后面的那个不能赋值
a[][] = null 是这样的,a是null ,不能a[i][j]复制,因为a没有看见接收你的值!!!
第一个问题,int a[][] = null——java数组没有初始化就使用,动态初始化的形式如下 int a[][] = new a[n][n]
第二个问题:System.out.println(a);——java数组调用toString()方法输出的并不是数组中的每一项
第三个问题:声明变量的时候尽量分开,int i, j = 0; int a[][] = new int[n][n];
代码更改后如下:
public static void main(String[] args) {
final int n = 3;
int i, j = 0;
int a[][] = new int[n][n];
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (i > j)
a[i][j] = (j + 1) / (i + 1);
else
a[i][j] = (i + 1) / (j + 1);
System.out.print(a[i][j]);
}
System.out.println();
}
}
int a[][] 没有引用对象,引用为空,要int a[][] = new a[5][5]