检查2D数组中的相邻单元格 - Java

时间:2017-11-24 10:08:00

标签: java arrays

我有一个JButton 14x14大小的2D数组。我用随机颜色绘制了JButton,每次点击JButton时我都需要找到相同颜色的相邻单元格。你们有没有想过如何让相同颜色的JButton细胞的邻居? (请记住,一旦找到邻居,它也应该寻找邻居和邻居。)

2 个答案:

答案 0 :(得分:1)

对我来说听起来像一个简单的递归问题。 我不熟悉Java,但由于它与C#非常相似,所以你应该能够很好地理解它。

List<Button> answer=new List<Button>();

private void ButtonClickEventHandler(object sender,EventArgs e)
{
    //I'm assuming you have a location property in each individual button,
    //and of course, the color.
    search(sender);
}

private void search(Button bt)
{
    int x=bt.x;
    int y=bt.y;
    bt.Visited=true;
    answer.Add(bt);
    if(x>0 && br[x-1][y].getColor()==bt.getColor() && !br[x-1][y].Visited) search(br[x-1,y]);
    if(x<14 && br[x+1][y].getColor()==bt.getColor() && !br[x+1][y].Visited) search(br[x+1,y]);
    if(y>0 && br[x][y-1].getColor()==bt.getColor() && !br[x][y-1].Visited) search(br[x,y-1]);
    if(y<14 && br[x][y+1].getColor()==bt.getColor() && !br[x][y+1].Visited) search(b[x,y+1]);
}

答案是你的答案!请原谅!

答案 1 :(得分:0)

public HashSet<JButton> lookForAdjancentButtons(int i, int j) {
    HashSet<JButton> set = new HashSet<>();
    set.add(board.getIndex(i, j));
    adjacentButtons(board.getColor(i, j), set, i, j);
    return set;
}

private void adjacentButtons(Color c, HashSet<JButton> set, int i, int j) {
    helperMethod(c, set, i - 1, j);
    helperMethod(c, set, i + 1, j);
    helperMethod(c, set, i, j - 1);
    helperMethod(c, set, i, j + 1);
}

private void helperMethod(Color c, HashSet<JButton> set, int i, int j) {
    if(i < 0 || j < 0 || i >= 14 || j >= 14) {
        return;
    }
    JButton b = board.getIndex(i, j);
    if(board.getColor(i, j) != c) {
        return;
    }
    if(!set.add(b)) {
        return;
    }
    adjacentButtons(c, set, i, j);
}