多个if判断和if-else-if判断的区别

拿二维矩阵来举个例子

public class Solution {
    public boolean Find(int target, int [][] array) {
        int rows = 0;
        int cols = array[0].length-1;
        while(rows <= array.length-1 && rows >= 0){
            if(target == array[rows][cols]){
                return true;
            }
            if(target > array[rows][cols]){
                rows++;
            }
            if(target < array[rows][cols]){
                cols--;
            }
        }
        return false;
    }
}

这是使用多个if进行判断的情况;

public class Solution {
    public boolean Find(int target, int [][] array) {
           int rows = 0;
           int cols = array[0].length-1;
        while(rows <= array.length-1 && cols >= 0){
            if(target == array[rows][cols]){
                return true;
            }
            else if(target > array[rows][cols]){
                rows++;
            }
            else{
                cols--;
            }
        }
        return false;
    }
}

这是使用if-else if - else的方法;

唔,补充一句,该二维矩阵从左到右递增,从上到下递增。

当输入一个比矩阵中右下角的元素还要大的整数时,使用方法一也就是多个if进行判断的时候会抛出数据越界的异常,因为方法一将一次循环进行多次判断,当判断到最后一行的最大元素也就是右下角的元素也比输入的整数小的时候,第二个if循环还是会将他加1,一般的思维来说,到这一步没有问题,当rows行数超出了矩阵的范围的时候终止循环返回false,但是方法一当完成了第二个if的判断将rows加1后还会进行第三个if的判断,而此时,是在第二个if的基础上进行的判断,入参的rows在介绍第二个if的判断的时候已经超出了矩阵的长度,此时再将其作为判断条件,自然就会抛出数组越界的异常,

而使用方法二则不会如此,方法二将一次循环作为一个整体只判断一次,当执行完else if 语句 将行数加1后不会再继续向下执行,而是返回循环的开始,判断是否符合继续循环的条件,此时自然是不符合的,直接跳出循环返回false,该整数不存在。

以上是我个人理解,大家如果有什么更好的思路或者我的思路有什么遗漏的地方,欢迎大家留意指出;如果大家有什么不理解的地方,咱们也可以一起讨论,共同探讨

你可能感兴趣的:(Java)