我可以給你一個簡單的方法來實現這一點。不完美,但容易。
public void getNeareast(int m, int choosedId) {
if (m <= 2) {//too simple ,you can just return the right result;
return;
}
int[] choose = new int[]{-m - 1, -m, -m + 1, -1, 0, +1, m - 1, m, m + 1};
int x = choosedId/m;
int y = choosedId % m;
if (x == 0 || (y == 0 && x == 1)) {//no top data
choose[0] = 0;
choose[1] = 0;
choose[2] = 0;
}
if ((x == m - 1 && y != 0) || x == m) {// no bottom data
choose[6] = 0;
choose[7] = 0;
choose[8] = 0;
}
if (y == 1) { // no left data
choose[0] = 0;
choose[3] = 0;
choose[6] = 0;
}
if (y == 0) {// no right data
choose[2] = 0;
choose[5] = 0;
choose[8] = 0;
}
List<Integer> result = new ArrayList<>();
for (int i = 0; i < 9; i++) {//get choosed data
if (choose[i] != 0) {
result.add(choosedId + choose[i]);
}
}
for (int i : result) {//print result;
Log.d("biu", "biu->" + i);
}
}
你試過了什麼?它應該很容易......讓選定的單元格呈現爲(r,c),然後您必須從(r-1,c-1)到(r + 1,c + 1)自己和不存在的......(r-行,c-列) – Selvin
但是先生,這是數組列表是1D假設它的大小9然後網格使3 * 3然後我怎麼能理解哪個不是行,哪些是列,並且它的變量5 * 5,7 * 7等等。@Selvin –