在假設
- 這是矩陣(每一行有列等於NUM)
- 方法的參數是有效的:
0 <= row < numOfRows
和0 <= 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");
}
而你的問題是什麼exaclty是什麼? –
如果我理解正確,那麼您希望它在此之後搜索位於左上角的單元格以** 1 **(如果存在任何),然後在1之上的單元格,並繼續執行此操作「圓搜索「,直到找到元素,或者查看所有數組,對吧? – dquijada
@ 911DidBush我無法找到一種方式,上述代碼完成後,沒有找到空的元素,然後我什麼它來搜索數組的其餘部分。 – chris007