Java初学随笔——空指针异常报错

在学习尚硅谷Java入门课程时,P159章节题目为输出杨辉三角;

* 【提示】
 * 1. 第一行有 1 个元素, 第 n 行有 n 个元素
 * 2. 每一行的第一个元素和最后一个元素都是 1
 * 3. 从第三行开始, 对于非第一个元素和最后一个元素的元素。
 * 即:yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];
 

之后自己照猫画虎写了一下代码,结果发现出现了错误,代码如下:

public static void main(String[] args) {
        int[ ][ ] yanghui = new int[10][ ];
        
        for( int i = 1 ; i < yanghui.length ; i++)                //实际需要修改的错误行
        {
            yanghui[i]=new int[i+1];
            
            yanghui[i][0] = yanghui[i][i] = 1;
            
            if(i>1)
            {
                for(int j = 1;j < yanghui[i].length-1;j++)
                {
                    yanghui[i][j] = yanghui[i-1][j]+yanghui[i-1][j-1];
                }
            }

        }
        
        for( int i = 0; i<yanghui.length; i++)
        {
            for( int j = 0; j < yanghui[i].length ; j++)               //提示错误行
            {
                System.out.print(yanghui[i][j]+"  ");
            }
            System.out.println();
        }
}

后来报错为:Exception in thread "main" java.lang.NullPointerException,经查询发现是某个数组指向了空值,空指针异常(关于空指针异常的介绍:BV1m64y1F7bD);不过不仔细看确实没看出来哪里指向的是null,随后debug后,得到的结果如下:

[null, [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1], [1, 6, 15, 20, 15, 6, 1], [1, 7, 21, 35, 35, 21, 7, 1], [1, 8, 28, 56, 70, 56, 28, 8, 1], [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]]

实际上是杨辉三角设置的时候,i值初值应该是0而不是1,从而导致二维数组内第一行指向了空值;然而我在CSDN以及其他网站查询的时候,均说“没有 new int()”或者是整个数组完全指向空值之类的回答,忽视了实际上你引用数值时也可能出现的内部某个值出现的NULL值的现象

所以修改后的代码如下:

public static void main(String[] args) {
        int[ ][ ] yanghui = new int[10][ ];
        
        for( int i = 0 ; i < yanghui.length ; i++)                //实际需要修改的错误行
        {
            yanghui[i]=new int[i+1];
            
            yanghui[i][0] = yanghui[i][i] = 1;
            
            if(i>1)
            {
                for(int j = 1;j < yanghui[i].length-1;j++)
                {
                    yanghui[i][j] = yanghui[i-1][j]+yanghui[i-1][j-1];
                }
            }

        }
        
        for( int i = 0; i<yanghui.length; i++)
        {
            for( int j = 0; j < yanghui[i].length ; j++)               //提示错误行
            {
                System.out.print(yanghui[i][j]+"  ");
            }
            System.out.println();
        }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值