if if 和 if else 条件语句一点自己的错误经历

今天在练习算法时,有一个用二分法查找一个从上之下递增、从左至右递增的二维数组里是否有某一个数,写出传入一个这样的数组和一个数字判断是否这个数字在这个数组的函数。

好啦,相信有不少人做过这个题目。思路就是从左下角开始判断,如果目标数小,就向上走一格(因为上面的比下面小),如果目标数大,就向右走一格(因为右边比左边大)。这个思路一出,我顿时自信满满才思泉涌,蹭蹭写好点击提交,总是报错。如下是我一开始写的代码

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

报错因为下标越界了

我愣是皱眉查看代码三分钟,没有看出来为什么。后来搜一搜大家的答案,才恍然大悟
原来应该这样写

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

其实答案跟我的思路是一样的,但是在条件语句上由于我的轻慢态度忽视了这个小小的if esle,那么 if if 和 if else 有什么不同呢

原来用 if if的话,每一个if 条件语句都要跑一遍,如果我走完第一个if 符合条件x减小了1,我还要在第二个if 里使用x再判断一遍,这样就不是初始的x 值了。

而用 if else 表示如果第一个 if 条件成立走完第一个if的代码块,后面就不用看了。这就是最显著的区别。

经过这次不能小瞧if else 和 if if 条件语句啊。

推荐阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 4,129评论 0 17
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 25,986评论 17 394
  • 一. Java基础部分.................................................
    wy_sure阅读 2,462评论 0 11
  • FreeCodeCamp - Basic JavaScript 写在前面: 我曾经在进谷前刷过这一套题,不过当时只...
    付林恒阅读 13,946评论 5 26
  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 2,722评论 0 11