多个if与else if的隐藏bug

从前一直没注意过,感觉很随便,比如:

if{……}
if{……}
if{……}

改写成:

if{

}else if{

}else{

}

一定要注意:多个else if是一条语句!

故前者是三条语句,后者是一条语句!

平时写的话是没有问题,但是是一个隐藏的bug,可能在多次执行的过程中就出现了数组越界的错误!


比如下面这题:

class Solution {
public:
    bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
        if(matrix.size()==0)
            return false;
        int row = 0;
        int height = matrix.size()-1;
        int column = matrix[0].size()-1;
        //每次从右上角开始查找
        while(column>=0&&row<=height){
            //一开始写成三个if语句
            if(matrix[row][column]==target)
                return true;
            if(matrix[row][column]>target)
                column--;
            if(matrix[row][column]<target)
                row++;
        }
        return false;
    }
};

会出现内存越界的错误!而且没有注意的时候自己根本察觉不出来啊!

看着我血迹斑斑的提交记录和懵逼抓狂的调试过程

终于弄明白!

class Solution {
public:
    bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
        if(matrix.size()==0)
            return false;
        int row = 0;
        int height = matrix.size()-1;
        int column = matrix[0].size()-1;
        //每次从右上角开始查找
        while(column>=0&&row<=height){
            if(matrix[row][column]==target)
                return true;
            else if(matrix[row][column]>target)
                column--;
            else
                row++;
        }
        return false;
    }
};
发布了377 篇原创文章 · 获赞 344 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/qq_41895747/article/details/104953345