获取单击的数组项

时间:2014-11-08 18:36:39

标签: java arrays algorithm

我创建了一个名为Cell的对象网格。每个单元格都具有以下属性:

x coordinate
y coordinate
width
height

单元格的宽度等于它的高度。每个单元格都有相同的宽度/高度。 这个算法创建了9 * 9个单元格,一个在另一个旁边:

cells = new Cell[9][0];

for(int i = 0; i < 9; i++) {
  for(int j = 0; j < 9; j++) {
    cells[i][j] = new Cell(i*cellWidth, j*cellHeight);
  }
}

单元格的构造函数请求x和y坐标。现在我们得到了一个Cell网格。 当我触摸屏幕时,我知道触摸屏幕的x和y坐标。我触摸的这个单元格应该运行一个名为isTouched的方法。

如何找出我触摸的细胞?

我尝试过这个算法:

public boolean isTouched(int zx, int zy) {
    if((zx >= x && zx <= x+cellSize) && (zy >= y && zy <= y+cellSize)) {
        return true;
    }else {
        return false;
    }
}

zx和zy是触摸的坐标。它检查被触摸的x轴是否大于或等于单元的x坐标,以及它是否小于单元的x坐标+单元的宽度。与y坐标相同。

当我点击第一行的单元格时,它不会起作用,第一行中的第一个元素被选中。当点击第五行中的元素时,第五行中的第五个元素会被选中,尽管我已按下另一个单元格。

这里是截屏enter image description here

我无法找到错误,有什么建议吗?提前致谢

1 个答案:

答案 0 :(得分:3)

计算包含触摸点的单元格会更有效,更容易。

Cell touchedCell(int x, int y) {
    i = x / cellWidth;
    j = y / cellHeight;
    if (i >= 9 || j >= 9 || i < 0 || j < 0)
      return null;
    else
      return cell[i][j];
}

阵列大小也是关闭的:

cells = new Cell[9][0];

这是什么导致奇怪的效果,因为数组中只有9个单元格,因为无论j是什么,索引cell[i][j] == cell[i][0]时j都会乘以0。

应该是

cells = new Cell[9][9];