Java 根据其在板数据结构单元[][]中的编号获取单元,而不通过2 FOR循环
我需要创建由细胞组成的棋盘游戏。 电路板应为5X5==>25个单元 我想知道要使用什么数据结构:Java 根据其在板数据结构单元[][]中的编号获取单元,而不通过2 FOR循环,java,arrays,jakarta-ee,multidimensional-array,Java,Arrays,Jakarta Ee,Multidimensional Array,我需要创建由细胞组成的棋盘游戏。 电路板应为5X5==>25个单元 我想知道要使用什么数据结构:单元格[][](“矩阵”)或数组列表 我选择了Cell[][],java二维数组中的java(“矩阵”)单元格 每个细胞都有编号。 这是它在矩阵中的外观: 例如: matrix[0][2] = Cell number 3 matrix[2][4] = Cell number 15 matrix[3][3] = Cell number 19 我有问题,如何获得细胞根据其编号 例如,如果我
单元格[][]
(“矩阵”)或数组列表
我选择了
Cell[][]
,java二维数组中的java(“矩阵”)单元格
每个细胞都有编号。
这是它在矩阵中的外观:
例如:
matrix[0][2] = Cell number 3
matrix[2][4] = Cell number 15
matrix[3][3] = Cell number 19
我有问题,如何获得细胞根据其编号
例如,如果我想得到单元格编号19,我需要用两个For循环传递所有行,而不是所有列。
在ArrayList中,只需使用'get(int index)'函数就可以了
当我使用Cell[][]
的数据结构时,是否有更好的方法根据单元格的编号获取单元格?我希望在构建单元格时获得该单元格的行和列编号:
public class Cell
{
private int m_RowNum;
private int m_ColNum;
private int m_Number;
}
但不知道怎么做。也许我可以构建一些函数,在不传递两个FOR循环的情况下获取单元格?您只需要一个公式将单元格编号转换为相关的二维坐标:
row = floor((number - 1) / columns);
column = (number - 1) % columns;
例如,对于单元格编号1
,您可以得到:
row = floor((1 - 1) / 5) = 0
column = (1 - 1) % 5 = 0;
row = floor((2 - 1) / 5) = 0
column = (2 - 1) % 5 = 1
这意味着单元格编号1
位于(0,0)
对于单元格编号2
,您可以得到:
row = floor((1 - 1) / 5) = 0
column = (1 - 1) % 5 = 0;
row = floor((2 - 1) / 5) = 0
column = (2 - 1) % 5 = 1
这意味着单元格编号2
位于(0,1)
让我们选择一个非平凡的,比如说17
。你会得到:
row = floor((17 - 1) / 5) = floor(16 / 5) = 3
column = (17 - 1) % 5 = 16 % 5 = 1
这意味着单元格编号
17
位于(3,1)
最佳方法是将实现隐藏在类板中,并为其提供方法
Cell getByRowCol( int row, int col )
Cell getByNumber( int number )
使用目前看来更方便的工具。如果两种方法中的任何一种都没有用,您可以稍后放弃它。如果选择的实现效率不高,您可以更改它,而不会影响板的接口和调用这些方法的位置
无论是使用数组还是使用ArrayList,都不存在任何危险的w.r.t.效率。但是信息隐藏对于所有这些场景来说都是“最佳实践”。这个“地板”不是java.lang.Math.floor。@laune在这种情况下,强制将其转换为
int
是可以接受的。整数除法的结果是int。@laune但是Math.floor
本身返回一个双精度;我指的是返回值。@VivinPaliath好的,看起来它可以工作。我怎样才能确定它是否适用于任何董事会?例如,对于板8x8?