【发布时间】:2018-01-16 06:23:37
【问题描述】:
这是一个非常小众的问题,所以请听我说完。
情况
我正在为命令行编写一个Ultimate Tic Tac Toe 游戏。我有一个名为currentState 的二维char[9][9] 数组,其中每个包含'X'、'O' 或' ' 的子数组表示大3x3 网格中的一个小3x3 网格(索引0 位于左上角, 1 是上中,2 是右上,3 是左中,等等,对于小网格和大网格。
问题
如果我尝试通过使用两个嵌套的for 循环正常地迭代数组来打印数组,那么要在每个小网格中显示的元素将显示在一条线上。我想打印currentState,这样它就会显示在一个“数组数组”中,就像电路板实际上想要的那样,如上面的链接所示。
我的尝试
我创建了另一个名为renderedState 的int[9][9],其想法是可以使用嵌套的for 打印,如上所述;每个元素都对应于currentState 中的正确元素(例如,currentState[3][7] == renderedState[5][1] - 板中3 位置7 的元素应打印在5 行,1 列(均为零-基于))。
这种方法的困难在于找到一种方法来更新这个数组,因为从 currentState 的正方形的索引被更新(如果 currentState1[0] 正在被改变,renderState[0][3] 也应该是改变)。经过多次失败的尝试才提出以下内容,通过循环 currentState 更新 renderedState:
for (int row = 0, board = 0; row < 9; row += 3)
for (int col = 0; col < 9; col += 3, board++)
for (int pos = 0; pos < 9; pos++)
renderedState[row + (pos / 3)][col + (pos % 3)] = currentState[board][pos];
这可以正常工作,但我计划开发某种引擎供用户使用,因此循环遍历所有 81 个元素以更改单个值需要太多时间,因为它似乎可以简化为单个值声明,如
renderedState[someRow][someColumn] = currentState[grid][pos];
...但是如何找到someRow 和someColumn 的值?
对不起,冗长的解释。我一直试图弄清楚这一点,以至于我自己都感到困惑。如果有不清楚的地方,请提出问题。
【问题讨论】:
-
你能在这里展示一些示例吗?
-
为什么需要辅助数组?只需使用从“打印坐标”到“存储坐标”的映射,即可通过两个嵌套的 for 循环直接打印数组。
-
不需要引入新的数组,只需重写toString()方法,遵循简单的逻辑。您可以使用调试器、铅笔等找到该逻辑(提示 - 某些 int 是否可被 3 整除?)。 :)
-
@Henry 这将是理想的,但我将如何去做呢?除非我弄错了,否则这将需要来自 @p.p. 的“逆”映射。建议如下 --- 你得到了
row和col并且必须找到grid和pos而不是反之亦然。 -
@JacksonH 不,这正是 p.p.回答。
标签: java arrays multidimensional-array tic-tac-toe