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

初学JAVA,访问二维数组时老提示[Exception in thread "main"]
初学JAVA,访问二维数组时老提示[Exception in thread "main"java.lang.ArrayIndexOutOfBoundsException: 2at net.lampbrother.net.array.YanHui.main(YanHui.java:47)],代码应该没错,可以编译通过,就是一运行就出错,怎么都通不过。

将这一行【yh[n][m] = yh[n-1][m-1] + yh[n-1][m];】的n-1改为n就能通过,不知道为啥?望大侠给予指点

代码列下:
public class YanHui {

/**
 * 杨辉三角形
 * 
 * 1、第一行有1个元素,第二行有2个元素,第n行有n个元素
 * 2、每一行第一元素及最后一元素数值均为1
 * 3、第二行起第二个元素起至n-1个元素=(前一行的第n个元素+第n-1元素)的数值之和
 *      表达式为:yanhui[n][m]=yanhui[n-1][m]+yanhui[n-1][m-1];
 * 
 * 具体步骤
 * 
 * 1、先定义一个二维数组
 * 2、初始化二维数组,第一行为1个元素,第n行有n个元素
 * 3、为二维数组赋值
 *    a.每一行的第一元素赋值及最后一个赋值为1;
 *    b.第二行第二个元素赋值为2;
 *    c.第三行起非第一元素最后一元素赋值:yanhui[n][m]=yanhui[n-1][m]+yanhui[n-1][m-1]
 *  
 */

public static void main(String[] args) {
//申明二维数组并分配内存空间
int[][] yh;
yh = new int[10][];

//对二维数组初始化,第一行为1个元素,第n行有n个元素
for(int n = 0; n < yh.length; n++){
yh[n] = new int[n+1];
}

//每一行的第一元素赋值及最后一个赋值为1;

for(int n = 0; n < yh.length; n++){
yh[n][0] = 1;
yh[n][n] = 1;
}


//测试输出
for(int i=0; i < yh.length; i++){
for(int j=0; j < yh[i].length; j++){
System.out.print(yh[i][j] + "\t");
}
System.out.println();
}

//第三行起非第一元素最后一元素赋值

for(int n = 0 ; n < yh.length; n++){
if(n > 1)
for(int m = 0; m < yh[n].length; m++){
if(m > 0 && m < yh.length)
yh[n][m] = yh[n-1][m-1] + yh[n-1][m];
}
}
}

}

------解决方案--------------------
if(m > 0 && m < yh.length)

这句代码改成:
if(m > 0 && m < yh[n].length-1)

即可。最后一个元素不赋值。否则溢出。