为什么这段程序编译成功,但运行抛出异常?
public class trigon2{
public static void main(String[] args){
int[][] triarray=new int[10][];
for(int i=0;i <triarray.length;i++){
triarray[i]=new int[++i];
}
int k=0;
for(int i=0;i <triarray.length;i++){
for(int j=0;j <triarray[i].length;j++){
j=0;
triarray[i][j]=++k;
System.out.println(triarray[i][j]);
}
}
}
}
//运行后,抛出异常:
//Exception in thread "main "
java.lang.NullPointerException // at trigon2.main(trigon2.java:9)
------解决方案--------------------triarray[i]没有初始化吧
------解决方案--------------------原因在于对 ++ 的误用。第一个 for 循环结束后,数组的结果实际变成了:
triarray[0] = [I@de6ced
triarray[1] = null
triarray[2] = [I@c17164
triarray[3] = null
triarray[4] = [I@1fb8ee3
triarray[5] = null
triarray[6] = [I@61de33
triarray[7] = null
triarray[8] = [I@14318bb
triarray[9] = null
建议楼主避免使用 ++i,而用更加清晰易懂的 i+1。
另外,j=0 那一句会造成无限循环。
最后楼主想得到的是不是这个:
triarray[0][0]=1
triarray[1][0]=2
triarray[1][1]=3
triarray[2][0]=4
triarray[2][1]=5
triarray[2][2]=6
triarray[3][0]=7
triarray[3][1]=8
triarray[3][2]=9
triarray[3][3]=10
triarray[4][0]=11
triarray[4][1]=12
triarray[4][2]=13
triarray[4][3]=14
triarray[4][4]=15
triarray[5][0]=16
triarray[5][1]=17
triarray[5][2]=18
triarray[5][3]=19
triarray[5][4]=20
triarray[5][5]=21
triarray[6][0]=22
triarray[6][1]=23
triarray[6][2]=24
triarray[6][3]=25
triarray[6][4]=26
triarray[6][5]=27
triarray[6][6]=28
triarray[7][0]=29
triarray[7][1]=30
triarray[7][2]=31
triarray[7][3]=32
triarray[7][4]=33
triarray[7][5]=34
triarray[7][6]=35
triarray[7][7]=36
triarray[8][0]=37
triarray[8][1]=38
triarray[8][2]=39
triarray[8][3]=40
triarray[8][4]=41
triarray[8][5]=42
triarray[8][6]=43
triarray[8][7]=44
triarray[8][8]=45
triarray[9][0]=46
triarray[9][1]=47
triarray[9][2]=48
triarray[9][3]=49
triarray[9][4]=50
triarray[9][5]=51
triarray[9][6]=52
triarray[9][7]=53
triarray[9][8]=54
triarray[9][9]=55
------解决方案--------------------public class Test {
public static void main(String[] args) {
int[][] triarray = new int[10][];
for (int i = 0; i < 10; i++) {
triarray[i] = new int[i];
}
int k = 0;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < triarray[i].length; j++) {