Exception in thread “main“ java.lang.ArrayIndexOutOfBoundsException: -1 java数组越界异常

问题描述

Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: -1 数组越界异常

int[][] yanghui = new int[10][];
   
        for (int i = 0;i < yanghui.length ;i++ ) {
            yanghui[i] = new int[i + 1];
            for (int j = 0;j < yanghui[i].length ;j++ ) {
                if (j == 0 || j == yanghui[i].length - 1) {
                    yanghui[i][j] = 1;
                }
                    yanghui[i][j] = yanghui[i - 1][j] + yanghui[i - 1][j - 1];
            }
        }

运行结果:
在这里插入图片描述


原因分析:

if语句并不等于if-else语句,if语句执行完后会继续执行yanghui[i][j] = yanghui[i - 1][j] + yanghui[i - 1][j - 1];但此时i=0,yanghui[0-1],所以会出现异常

int[][] yanghui = new int[10][];
   
        for (int i = 0;i < yanghui.length ;i++ ) {
            yanghui[i] = new int[i + 1];
            for (int j = 0;j < yanghui[i].length ;j++ ) {
                if (j == 0 || j == yanghui[i].length - 1) {
                    yanghui[i][j] = 1;
                } 
                    yanghui[i][j] = yanghui[i - 1][j] + yanghui[i - 1][j - 1];
            }
        }

解决方案:

if后面添加else,以确保只有不在边界位置的元素才进行计算。

int[][] yanghui = new int[10][];
   
        for (int i = 0;i < yanghui.length ;i++ ) {
            yanghui[i] = new int[i + 1];
            for (int j = 0;j < yanghui[i].length ;j++ ) {
                if (j == 0 || j == yanghui[i].length - 1) {
                    yanghui[i][j] = 1;
                } else {
                    yanghui[i][j] = yanghui[i - 1][j] + yanghui[i - 1][j - 1];
            	}
            }
        }

运行结果:

Exception in thread “main“ java.lang.ArrayIndexOutOfBoundsException: -1 java数组越界异常_第1张图片

你可能感兴趣的:(java,开发语言)