Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据其在板数据结构单元[][]中的编号获取单元,而不通过2 FOR循环_Java_Arrays_Jakarta Ee_Multidimensional Array - Fatal编程技术网

Java 根据其在板数据结构单元[][]中的编号获取单元,而不通过2 FOR循环

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 我有问题,如何获得细胞根据其编号 例如,如果我

我需要创建由细胞组成的棋盘游戏。 电路板应为5X5==>25个单元 我想知道要使用什么数据结构:
单元格[][]
(“矩阵”)或
数组列表

我选择了
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?