初学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];
}
}
}}

解决方案 »

  1.   

    数组最有一个元素的index 应该是m-1
      

  2.   

    if(m > 0 && m < yh.length)
    这句代码改成:
    if(m > 0 && m < yh[n].length-1)
    即可。最后一个元素不赋值。否则溢出。
      

  3.   

    这应该是最基本的几个异常之一了,
    定义
    String[][] str=new String[4][4];
    那么就应该是
    str[0],str[1],str[2],str[3]这四个
      

  4.   

    正解 // 第三行起非第一元素最后一元素赋值 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[n].length-1)
    yh[n][m] = yh[n - 1][m - 1] + yh[n - 1][m];
    }
    }
      

  5.   

    关键是怎么解决问题
    google查ArrayIndexOutOfBoundsException
    会发现
    那个2是数组越界的index