Exception in thread "main" java.lang.NullPointerException
at LotteryArray.main(LotteryArray.java:14)
书上的例子,编译没问题,运行时报错如上
public class LotteryArray
{
public static void main(String[] args)
{
final int NMAX=10;

//allocate triangular array
int[][] odds=new int[NMAX+1][];
for(int n=0;n<NMAX;n++)
  odds[n]=new int[n+1];
  
//fill trangular array
for(int n=0;n<odds.length;n++)
  for(int k=0;k<odds[n].length;k++)
  {
   /*
   copute binomial coefficient
   n*(n-1)(n-2)*...*(n-k+1)
   -------------------------
   1*2*3*4*..............k
   */
   int lotteryOdds=1;
   for(int i=1;i<=k;i++)
      lotteryOdds=lotteryOdds*(n-i+1)/i;
      
   odds[n][k]=lotteryOdds;
    
  }
  //print triangular array
  for(int[] row:odds)
  {
   for(int odd:row)
      System.out.printf("%4d",odd);
   System.out.println();   
  } 
}
}

解决方案 »

  1.   

    odds[n].length  没有[n]吧。
      

  2.   

    int[][] odds=new int[NMAX+1][];二维数组好像必须定义第2维的个数吧。
      

  3.   

    for(int[] row:odds)
    {
    for(int odd:row)
    System.out.printf("%4d",odd);
    System.out.println();   
    }  
    }
    }
    这个东西好像不对
      

  4.   

    在引用中 odds[n]=new int[n+1]; odds数组本来就时一维数组 odds[n]=new int[n+1]; 所以这里出问题了
      

  5.   

    在引用中 odds[n]=new int[n+1]; odds数组本来就时一维数组 odds[n]=new int[n+1]; 所以这里出问题了for(int k=0;k<odds[n].length;k++)
      

  6.   

    int[][] odds=new int[NMAX+1][];
    应该是int[][] odds=new int[NMAX][];
    多申请了内存
      

  7.   

    你把int[][] odds=new int[NMAX+1][];改成int[]odds=new int[NMAX+1];试试
      

  8.   

    int[][] odds=new int[NMAX+1][];
    for(int n=0;n<NMAX;n++)改成 n<NMAX+1
      

  9.   

    为是么不是for(int n=0;n<NMAX;N++)?
    谁有更经典的关于数组的实例?
      

  10.   


    int[][] odds=new int[NMAX+1][]; for(int n=0;n<NMAX;n++)
    odds[n]=new int[n+1];
    这里创建了一个NMAX + 1长度数组,但是赋值的时候只赋值到odds[NMAX - 1],并没有赋值odds[NMAX],所以在下面的代码中调用odds[NMAX].length的时候会报出异常