牛骨文教育服务平台(让学习变的简单)
博文笔记

java 基础数据遍历(2)----二维数组查找

创建时间:2016-04-12 投稿人: 浏览次数:1610

题目要求:
一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
输入描述:

array: 待查找的二维数组
target:查找的数字

输出描述:

查找到返回true,查找不到返回false。

解题思路:
1.确认使用for循环。
2.为避免重复输出结果,当找到和target值相等的array[][]时,立即跳出循环,并在循环外判断是否存在。
3.输出结果。

实际操作:

    public static void main(String[] args) {
        int[][] array={{1,2,3},
                       {2,3,4},
                       {3,4,5}};
        boolean find=false ;
        Scanner scanner =new Scanner(System .in);
        System.out.println("请输入数字:");
        int target=scanner .nextInt();//确认target的值

        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if (array[i][j]==target) {
                    find=true;//返回true.
                    i=array.length-1;
                    j=array[i].length-1;//当target数值等于array[i][j]时,立即跳出循环。
                }
            }
        }if (find) {
            System.out.println("存在数字:"+target);//在循环外判断target值是否存在,并输出结果。
            }else {
            System.out.println("不存在数字:"+target);
        }
    }

}

实际结果
这里写图片描述
这里写图片描述
思路扩展:
若修改本题的二维数组为:每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。且每个数字都不会重复出现。其他要求不改变。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

解题思路:
1.使用for循环
2.按数组的规律,为减少循环次数,决定从数组的左下角开始寻找与target的值相等的array[i][j]。
3.具体操作:先将target值与array[i][0]比较(i=array.length-1)。当target大于或等于array[i][0]时,开始向右比较target和数组的值。反之,若target小于或等于array[i][0]时,进入循环(i–),直至发现target大于或等于array[i][0]。
4.输出结果。

    public static void main(String[] args) {
        int[][] array={{1,2,3,4,5},
                       {6,7,8,9,10},
                       {11,12,13,14,15},
                       {16,17,18,19,20}};
        boolean find=false;
        int target =5;
        int loopNum =0;

        for (int i = array.length-1; i>-1; i--) {
            if (target>=array[i][0]) {
                for (int j = 0; j < array[i].length; j++) {
                    if (target==array[i][j]) {
                        find=true;
                        i=0;//跳出外循环
                        j=array[i].length-1;//跳出内循环
                        //找到数字后,立即跳出循环。
                    }
                    loopNum++;
                }
                i=0;//跳出外循环
            }else {
                loopNum++;
            }
        }if (find) {
            System.out.println(target+" "+loopNum);
        }else {
            System.out.println("sorry"+loopNum);
        }
    }

}

实际结果:这里写图片描述

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。