Java 一个关于使用&&导致的BUG

二维数据track的定义:

1 byte[][] track = new byte[10][10];

本意:判断track[trackY][trackX]的值是否为零,以及trackX是否小于10。

带BUG的代码:

1 if ((track[trackY][trackX] == 0) && ((trackX) < 10)) {
2     track[trackY][trackX] = 1;
3     trackX++;
4 }

执行这段代码,导致IDE抛出数组索引越界的异常:Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 10

后来终于发现,当trackX的值等于10,再执行判断,会出现“track[trackY][10]”这种情况,因此导致IDE抛出异常。

如果将判断语句中的两者的位置颠倒,则先判断trackX是否小于10,如果大于10,则直接结束整个判断,不会再执行“&&”后面的语句,从而不会导致异常。 

修改后的代码:

1 if (((trackX) < 10) && (track[trackY][trackX] == 0)) {
2     track[trackY][trackX] = 1;
3     trackX++;
4 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值