java - 获取点击的数组项

标签 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 坐标。现在我们得到了一个单元格网格。 当我触摸屏幕时,我知道触摸屏幕的 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

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

最佳答案

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

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 将乘以 0 cell[i][j] == cell[i][0] 不管 j.

应该是

cells = new Cell[9][9]; 

关于java - 获取点击的数组项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26820647/

相关文章:

javascript - 按索引从数组输出返回未定义

Javascript,合并两个排序数组 : Can someone please tell me why this isn't giving the correct mergeSort?

algorithm - 弱连通平衡有向图

java - ListPreference 抛出 NullPointerException

java - JSF 语言环境问题

java - 有史以来第一个 Java 应用程序;无法在数据库内查询?

java - 如何加粗 AlertDialog 中使用的 CharSequence 中的一项?

php - 将 HTML 表单值存储到 PHP 中的数组中并打印

algorithm - 交叉验证

git - 重新定位到上游版本