public class LotteryArray{
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;
//System.out.println(odds[n][k]);
}
}
//System.out.print(odds.length);
                  //下面这段是书上的例子里面的FOR.我初学..没看出哪里有问题.
for (int n=0;n<odds.length ;n++ ){
for(int k=0;k<odds.length;k++){
//System.out.print(odds[n][k]);
String output = "" + odds[n][k];
output = output.substring(output.length()-4);
System.out.print(output);
}
System.out.println();
}
/*这是源代码中提供的FOR语句.
for (int[] row : odds){
for (int odd : row)
System.out.printf("%4d", odd);
System.out.println();
}
*/
}
}========================================================
我用书上的那段例子中的FOR来编译成功了.可是用JAVA运行的时候出错.
Exception in thread "main" java.lang.StringIndexOutOf
ex out of range: -3
        at java.lang.String.substring(Unknown Source)
        at java.lang.String.substring(Unknown Source)
        at LotteryArray.main(LotteryArray.java:28)
================
而我用网上下载的源代码中的FOR来运行.却又成功了.
=V=我初学..不明白错在哪里..特求助..
而且下载的源代码那段程序我看不懂..=V=

解决方案 »

  1.   

    书中的例子有两个问题
    for(int k=0;k<odds.length;k++){
    ==〉for(int k=0;k<odds[n].length;k++){//System.out.print(odds[n][k]);
    String output = "" + odds[n][k];
    output = output.substring(output.length()-4);
    ==>output = output.substring(output.length()-1);这样就可以运行了,运行结果是杨辉三角形
      

  2.   

    for (int[] row : odds){
    for (int odd : row)
    System.out.printf("%4d", odd);
    System.out.println();
    }
    for (int[] row : odds)中的row是初始值也就是数组的第一个元素,odds则是结束值,数组的最后一个元素,:就代表按下标递增
    我也是初学者,理解有可能错误!