2016-04-26 62 views
0

我想寫一個代碼,通過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

回答

1

在假設

  • 這是矩陣(每一行有列等於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

有三個循環。考慮第一個爲半徑,每個迭代下一個指定位置周圍的圓(框架)被處理。第一個內循環從上到下迭代幀內的行。最後一個循環迭代列,但僅限幀內最上面和最下面的行。對於內部行,只有最左邊和最右邊的元素被處理,因爲之間已經處理了之間的元素 –

相關問題