package v1;public class V2 { public static void main(String[] args) {
final int NMAX = 10; int[][] odds = new int[NMAX + 1][]; for (int n = 0; n <= NMAX; n++) {
odds[n] = new int[n + 1];
} //
for (int n = 0; n < odds.length; n++)
for (int k = 0; k < odds[n].length; k++) {
int lotteryOdds = 1;
for (int i = 1; i <= k; i++)
lotteryOdds = lotteryOdds * (n - i + 1) / i;
odds[n][k] = lotteryOdds;
}
for (int[] row : odds) {
for (int odd : row) {
System.out.printf("%4d", odd);
System.out.println(); }
} }}

解决方案 »

  1.   

    int[][] odds = new int[NMAX + 1][]是分配一个2维数组,是
    NMAX+1行的,列没有确定。
    for (int n = 0; n <= NMAX; n++) { 
    odds[n] = new int[n + 1]; 
    } 是对每一行进行分配空间,就是第0行是1列,第1行有2列。。以下就是对每个单位赋值了。
    赋值的过程带几个数就明白了,也不了解他这么算有出来的
    lotteryOdds 代表什么意义,然后就是分行输出了
      

  2.   

    int[][] odds = new int[NMAX + 1][]; 这样能编译通过吗?行数可以不用确定,列数能用不确定吗?
    跟C,C++里不同?
      

  3.   

    for (int n = 0; n <= NMAX; n++) {
    odds[n] = new int[n + 1];
    } 是对每一行进行分配空间,就是第0行是1列,第1行有2列。。 是什么意思呢
      

  4.   

    这是java核心技术中的代码啊,你看书不就能看懂了吗,书上说得很详细。
      

  5.   

    《JAVA核心技术 卷I : 基础知识 第八版》第86页。