• 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 }
  • 相关阅读:
    10.23
    四则运算(1)
    10.12
    10.22
    今日总结
    Java自学
    Java自学
    Java自学
    Java自学
    Java自学
  • 原文地址:https://www.cnblogs.com/Satu/p/9863640.html
Copyright © 2020-2023  润新知