我一直在自杀,试图开发一种算法来确定网格中单元格所在行或列的位置。

例如,我有一个8x8的网格,我需要确定第3行中所有单元格的位置。

我的问题是,没有很多循环,我需要找出一种方法将点击位置映射到包含该单元格的行和列。

这是我创建单元格的ArrayList的操作:

public class GameBoard {
public ArrayList<Row> rows = new ArrayList<Row>();
public ArrayList<Column> columns = new ArrayList<Column>();

private int maxPositions;

public GameBoard(int rowCount, int colCount) {
    this.maxPositions = (rowCount * colCount) - 1;

    for(int x = 0;x < rowCount;x++){
        Row row = new Row(x);
        row.cells.addAll(this.getRowCells(x, colCount));
        rows.add(row);
    }

    for(int x = 0;x < colCount;x++){
        Column column = new Column(x);
        column.cells.addAll(getColumnCells(x, colCount));
        columns.add(column);
    }
}

private ArrayList<Cell> getRowCells(int rowId, int colCount) {
    ArrayList<Cell> row_cells = new ArrayList<Cell>();

    int first_position  = ((rowId * colCount) -1);
    Cell cell = new Cell();
    cell.id = first_position;
    row_cells.add(cell);
    int x = 1;
    while(x < colCount) {
        cell = new Cell();
        cell.id = first_position + x;
        row_cells.add(cell);
        x++;
    }
    return row_cells;       
}

private ArrayList<Cell> getColumnCells(int columnId, int rowCount) {
    ArrayList<Cell> col_cells = new ArrayList<Cell>();

    int first_position  = columnId;
    Cell cell = new Cell();
    cell.id = first_position;
    col_cells.add(cell);
    int x = 1;
    while(x < rowCount) {
        cell = new Cell();
        cell.id = rows.get(x).cells.get(columnId).id;
        col_cells.add(cell);
        x++;
    }
    return col_cells;
}

public Cell getColumnNextCell(int position, int columnId) {
    Cell cell = null;
    if ((position > -1) && (position <= maxPositions)) {
        cell = columns.get(columnId).cells.get(position + 1);
    }
    return cell;
}

public Cell getColumnPreviousCell(int position, int columnId) {
    Cell cell = null;
    if ((position > 0) && (position <= maxPositions)) {
        cell = columns.get(columnId).cells.get(position - 1);
    }
    return cell;
}

public Cell getRowNextCell(int position, int rowId) {
    Cell cell = null;
    if ((position > -1) && (position <= maxPositions)) {
        cell = rows.get(rowId).cells.get(position + 1);
    }
    return cell;
}

public Cell getRowPreviousCell(int position, int rowId) {
    Cell cell = null;
    if ((position > 0) && (position <= maxPositions)) {
        cell = rows.get(rowId).cells.get(position - 1);
    }
    return cell;
}

}

如使用getColumnNextCell()到getRowPreviousCell()之类的方法所看到的,逻辑是一团糟,我被困在如何确定所单击单元格的列和行上(如我所解释的)。 任何帮助将不胜感激。

为了清楚起见,行和列对象是相同的。 他们看起来像这样。

public class Column {
public int id;
public ArrayList<Cell> cells = new ArrayList<Cell>();

public Column(int idx) {
    this.id = idx;
}

}

#1楼 票数:1 已采纳

你不能只对单元格使用数组吗

int rows, cols;
Cell[][] cells;

public GameBoard(int rowCount, int colCount) {
    this.maxPositions = (rowCount * colCount) - 1;

    this.rows = rowCount;
    this.cols = colCount;
    this.cells = new Cell[rows];
    for(int i=0; i < rows; i++) {
        cells[i] = new Cell[cols];
        for(int j = 0; j < cols; j++) {
            cells[i][j] = new Cell();
            // whatever else you need to do...
        }
    }
}

这样,很容易获得您想要的单元

Cell getCell(int position) {
     return cells[position/rows][position%cols];
}

#2楼 票数:0

为什么不使用简单的二维数组? 如果创建后未调整网格大小,则使用ArrayList对象没有任何好处。 那么,让您的基类是这样的:

public class GameBoard {
  private Cell[][] cells;
  private int maxPositions;
  private int rows;
  private int cols;

  public GameBoard(int rowCount, int colCount) {
    this.rows = rowCount;
    this.cols = colCount;
    cells = new Cell[rowCount][colCount];
    for (int i = 0; i < rowCount; i++) {
      for (int j = 0; j < colCount; j++) {
        cells[i][j] = new Cell();
      }
    }
    this.maxPositions = (rowCount * colCount) - 1;
  }
  ...
}

现在您没有行和列对象,只有单元格数组。 这些单元格实际上不是您所需要的吗?或者这些行和列数组还有其他用途吗? 所以我认为您正在尝试以太困难的方式来做简单的事情。

  ask by androidworkz translate from so

未解决问题?本站智能推荐:

1回复

如何在Android中减少网格视图的行和列大小?

在我的应用程序中,我使用了网格视图,并且在每个网格中都有一个图像。 现在我的问题是网格之间的间距很高。 我想减少网格之间的空间。 请帮我。 在我使用过的xml布局中 现在我在Xml中的每个图像周围都有一个矩形 我的XML为gridview。 活动: 基于json我将行和
1回复

在网格布局中设置行和列的大小

我想在Tic Tac Toe游戏的Android Studio中创建3x3网格布局。 但是,我希望ImageViews显示的图块小于实际的行和列,因此它们之间留有一点空间,并且看起来不会过于拥挤。 但是我没有找到关于如何设置独立于内容的特定行和列大小的任何答案。 我曾考虑过编辑图片,以使
2回复

如何在网格布局中获取行和列值?

我在Android Studio中定义了一个GridView,想获取每个单元格的行列值。 基本上我正在构建一个 Tic Tac Toe 类型的应用程序,我想要每个单元格的值,以便我可以找到该单元格是空的还是已填充的。
1回复

具有4列和2行的网格[重复]

这个问题在这里已经有了答案: 方形网格 - XML (1 个回答) 4年前关闭。 我想为我未来的块创建一个网格。这些块将显示从气象站检索到的测量值。 请问如
5回复

在我的布局中需要帮助

我对android完全陌生,在实现带有一些间距问题的布局时遇到一些问题,所以有人建议我该怎么做? 提前致谢。 XML文件 输出量 当editText上有值时,文本在textField之外。 如何将文本向右移动一点? 如何将一切向下移动 缩小textView和ed
1回复

在AndroidStudio中需要帮助

我刚开始学习Android,并且正在向Udemy学习。 我目前正在学习的讲座内容并不清楚,希望获得帮助。 在本讲座中,讲师正在讲授创建一个名为connect 3的游戏,该游戏与Tic Tac Toe相似。 我的演讲有很多问题。 问题1:要初始化两名球员,教练首先要在开始时制作一个整数
2回复

需要Android线性布局帮助(两列)

我是Android新手,需要一些帮助来创建xml代码的xml代码,该代码可重现此图中所示的布局: 我将展示到目前为止我已经尝试过的东西,但是我很沮丧地删除了整个xml文件。 先感谢您!
2回复

在网格视图中创建页脚时需要帮助

谁能帮助我在Android的网格视图中创建页脚? 我有显示图像低于净我使用一个TextView显示网格视图click here to view more images 。 我的问题是在gridview中显示消息。 请帮助有关这一点。