在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。
請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
規律:首先選取數組中右上角的數字。如果該數字等于要查找的數字,查找過程結束:
如果該數字大于要查找的數字,剔除這個數字所在的列:如果該數字小于要查找的數字,剔除這個數字所在的行。
也就是說如果要查找的數字不在數組的右上角,則每-次都在數組的查找範圍中剔除)行或者一列,這樣每一步都可以縮小
查找的範圍,直到找到要查找的數字,或者查找範圍為空。
public class Test03{
public static boolean find(int[][] matrix,int number){
//輸入條件判斷
if (matrix == null || matrix.length < 1||matrix[0].length<=1){
return false;
}
int rows = matrix.length;//總行數
int cols = matrix[0].length;//總列數
int row = 0;//開始的行數
int col = cols - 1;
//開始查找
while (col>=0 && col <= cols && row >= 0 && row <= rows){
if (number == matrix[row][col]){
return true;
}else if (matrix[row][col] < number){
row++;
}else if (matrix[row][col] > number){
col--;
}
}
return false;
}
public static void main(String[] args) {
int[][] matrix = {{1,2,3}, {4,5,6}, {7,8,9}};
System.out.println(find(matrix,5));
System.out.println(find(matrix, 10)); // 要查找的數不在數組中//
// System.out.println(find(matrix, 1)); // 要查找的數是數組中最小的數字
// System.out.println(find(matrix, 9)); // 要查找的數是數組中最大的數字
// System.out.println(find(matrix, 0)); // 要查找的數比數組中最小的數字還小
// System.out.println(find(matrix, 11)); // 要查找的數比數組中最大的數字還大
// System.out.println(find(null, 16)); // 健壯性測試,輸入空指針
}
}
超過邊界條件。Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
本題的優化後面再說