从一个sertent元素开始在一个2维数组中搜索java

问题描述:

我想写一个代码,通过2维数组搜索并试图找到最接近的元素“x”是空的,如果“x”有任何数据英寸元素的坐标是从另一种方法给出的。例如“x”是(3,2)。如果没有空元素,则代码必须继续在整个数组中搜索。从一个sertent元素开始在一个2维数组中搜索java

public void find(int row, int column) { 
    for (int i = row - 1; i < row + 2; i++) { 
     for (int k = column - 1; k < column + 2; k++) { 

      if (this.arr[i][k].equals(" ")) { 
       System.out.println(i + "," + k + " is empty."); 
       return; 
      } 
     } 

    } 
} 

我在寻找有关如何编码此方法的任何有用建议的前言。 谢谢。

+0

而你的问题是什么exaclty是什么? –

+0

如果我理解正确,那么您希望它在此之后搜索位于左上角的单元格以** 1 **(如果存在任何),然后在1之上的单元格,并继续执行此操作“圆搜索“,直到找到元素,或者查看所有数组,对吧? – dquijada

+0

@ 911DidBush我无法找到一种方式,上述代码完成后,没有找到空的元素,然后我什么它来搜索数组的其余部分。 – chris007

在假设

  • 这是矩阵(每一行有列等于NUM)
  • 方法的参数是有效的:0 <= row < numOfRows0 <= column < numOfColumns

这个代码将执行搜索2维阵列的按照您所描述的方式在指定的元素周围。 注意,这是绕不指定元素时钟方向一轮搜索,而是从左上角搜到右下角(从上至下和从左至右)

public void find(int row, int column) { 
     int distance = 1; 
     int numOfRows = arr.length; 
     int numOfColumns = 0; 
     if (arr.length > 0) { 
      numOfColumns = arr[0].length; 
     } 
     int maxDistance = Math.max(numOfRows, numOfColumns);   
     for (distance = 1; distance < maxDistance; distance ++) { 
      for (int i = Math.max(row - distance, 0); i <= Math.min(row + distance, numOfRows - 1); i++) { 
       if (Math.abs(i - row) == distance) { 
        // Check row 
        for (int k = Math.max(column - distance, 0); k <= Math.min(column + distance, numOfColumns - 1); k++) { 
         if (arr[i][k] == null || arr[i][k].trim().isEmpty()) { 
          System.out.println((i+1) + "," + (k+1) + " is empty."); 
          return; 
         } else { 
          System.out.println((i+1) + "," + (k+1) + " is not empty."); 
         } 
        } 
       } else { 
        // Check only edge elements 
        int k = column - distance; 
        if (k >= 0) { 
         if (arr[i][k] == null || arr[i][k].trim().isEmpty()) { 
          System.out.println((i+1) + "," + (k+1) + " is empty."); 
          return; 
         } else { 
          System.out.println((i+1) + "," + (k+1) + " is not empty."); 
         } 
        } 
        k = column + distance; 
        if (k < numOfColumns) { 
         if (arr[i][k] == null || arr[i][k].trim().isEmpty()) { 
          System.out.println((i+1) + "," + (k+1) + " is empty."); 
          return; 
         } else { 
          System.out.println((i+1) + "," + (k+1) + " is not empty."); 
         } 
        } 
       } 
      } 
     } 
     System.out.println("No empty elements"); 
    } 
+0

你的代码加上我做的一些修改就像一个魅力。谢谢。顺便说一下,你能解释一下这个工作的效果吗? 我真的很感激它。 – chris007

+0

有三个循环。考虑第一个为半径,每个迭代下一个指定位置周围的圆(框架)被处理。第一个内循环从上到下迭代帧内的行。最后一个循环迭代列,但仅限帧内最上面和最下面的行。对于内部行,只有最左边和最右边的元素被处理,因为之间已经处理了之间的元素 –