int[][] SM = new int[s[0].length][];
             
            for(j=0; j<s[0].length; j++){
                i = 0;
                k = 0;
                while(i<20){
                    if(s[i][j] != -1){
                        SM[j][k++] = s[i][j];
                        
                    }
                    i++;
                }
            }
这里定义的SM数组,只有行数,没定义列数,因为每一行可能列数不一样。但是这样定义,在运行是会抛出nullpointerexception, 请问对于这样的问题数组应该怎么定义啊?

解决方案 »

  1.   

    下面以10*10的数组为例
    int[][] SM = new int[10][]; 的意思是建立一个指向10数组的引用数组
    要赋值的时候得先 new int[10],再将new的数组赋给SM
    以下代码供参考:  int[][] SM = new int[10][];
      int[] sm = new int[10];
      for(int i=0; i<10; ++i){
         sm[i]=i+1;
      }
      for(int i=0; i<10; ++i){
         SM[i]=sm;
      }
      

  2.   

    不好意思,下句差个"个"字int[][] SM = new int[10][]; 的意思是建立一个指向10个数组的引用数组
      

  3.   

    SM[j][k++] = s[i][j];???
    SM[j]都没有创建,怎么能直接用?
    必须先SM[j]=new int[?]之后才能用!
      

  4.   

    liye9903()是正确的吧,楼上可能和我一样刚学的
      

  5.   

    晕死,我跟liye9903()说的是一码事