初学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)
即可。最后一个元素不赋值。否则溢出。