日期:2014-05-20  浏览次数:20875 次

为什么这段程序编译成功,但运行抛出异常?
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++) {