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