将2d数组打印为文字"数组阵列" (阅读说明)

时间:2018-01-16 06:23:37

标签: java arrays multidimensional-array tic-tac-toe

这是一个非常小众的问题,所以请听我说。

情况

我正在为命令行编写Ultimate Tic Tac Toe游戏。我有一个名为char[9][9]的2d currentState数组,其中包含'X''O'' '的每个子数组代表一个小的3x3网格。对于小网格和大网格,大的3x3网格(索引0是左上角,1是顶部中间,2是右上,3是中左等)。

问题

如果我试图通过两个嵌套的for循环正常迭代来打印数组,那么在每个小网格中显示的元素将显示在一条线上。我想打印currentState所以它将显示在"数组数组中#34;就像电路板实际上要看一样,如上面的链接所示。

我尝试过的事情

我创建了另一个名为int[9][9]的{​​{1}},其想法是可以使用嵌套的renderedState进行打印,如上所述;每个元素都对应for中的正确元素(例如,currentState - 位于currentState[3][7] == renderedState[5][1]的{​​{1}}位置的元素应打印在行3上},列7(都是从零开始的))。

这个方法的难点在于找到一种方法来更新这个数组,因为currentState的square的索引正在被更新(如果currentState 1 [0]被更改,renderState [0] [3]应该也改变了)。我们尝试了许多尝试失败的尝试,通过循环5来更新1

renderedState

这样可以正常工作,但我计划开发某种引擎供用户使用,因此循环遍历所有81个元素以更改单个值需要花费太多时间才能看到它可以缩减为单个声明,如

currentState

...但如何找到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]; renderedState[someRow][someColumn] = currentState[grid][pos]; 的值?

很抱歉这个冗长的解释。我一直试图弄清楚这一点,以至于我自己也搞砸了。如果不清楚,请提问。

1 个答案:

答案 0 :(得分:1)

你可以从值grid和pos中计算someRow和someColumn的值:

someRow = Math.floor(grid / 3) * 3 + Math.floor(pos / 3); //each third grid-value the row increases by 3, each third pos-value it increases by 1
someColumn = (grid % 3) * 3 + pos % 3; //The column is thrice the rest of grid divided by 3 plus the position divided by three

如果您正在使用基于零的编号系统,则此代码可以正常工作。否则,您需要使用相应的递减值gridpos