在二维数组中移动对象

时间:2013-10-25 22:47:03

标签: java

我正在L_Game上创建一个项目,现在我停留在我的代码所在的移动方法中:

public void move(int row, int col) {
        char [][] temp= new char [cells.length][]; 
        for (int i= 0; i< cells.length; i++) {
            int destRow = (i+row)%cells.length;
            temp[destRow] = new char [cells[i].length];
            for (int j= 0; j < cells[i].length; j++)
                temp[destRow][(j+col)%cells[i].length] = cells[i][j];
            }
              cells= temp;
        }

我的移动方法似乎没有正确移动对象..

因此输出假设与左侧相似,右侧是我的代码的输出。我知道我显然没有正确地移动它,但我也不知道我做错了什么......

    $ slide.move(0,2)                             $ slide.move(0,2)
    $ slide.cells -> {                            $ slide.cells -> {
    { , ,o, },                                 |  { , , , },
    { , ,o, },                                 |  { , , ,o},
    { , ,o,o},                                 |  { , , ,o},
    { , , , }                                  |  {o, , ,o}
    }                                             }
    $ slide.move(1,2)                             $ slide.move(1,2)
    $ slide.cells -> {                            $ slide.cells -> {
                                                > { ,o,o, },
    { , , , },                                    { , , , },
    { , ,o, },                                 |  { ,o, , },
    { , ,o, },                                 |  { ,o, , }
    { , ,o,o}                                  <
    }                                             }
  • '|'符号标识不同的行。
  • '&lt;'符号指向左列中不在右列中的行。
  • '&gt;'符号指向右列中不在左列中的行。

有关如何修复移动方法以使其正确移动的任何想法吗?

由于

2 个答案:

答案 0 :(得分:1)

好像你将L相对于其最后位置移动,但在左侧示例中rowcol指定顶部“o”的绝对位置。

答案 1 :(得分:0)

关闭grexter89的答案,假设move(r,c)应该将L放在该位置(而不是将L移动指定的数量 - 如果我错了,请纠正我):

您的程序的行为与您告诉它的行为完全相同:

  • 移动当前状态,将结果存储在新的临时状态。
  • 将当前状态设置为新移动状态。

你的举动是递增的,因为这是你写的程序。对于这些类型的事物,可以将其视为“翻译”:用英语(或其他)表达您想要做的事情,然后翻译成您的代码。如果上述两个步骤不是您想要做的,那么您就是从错误的想法开始的。

看起来你真正想要做的就是这个。首先定义一个初始状态,其中L位于左上角,当您开始时,将当前状态设置为该初始状态。然后移动这样做:

  • 移动初始状态,将结果存储在新的临时状态。
  • 将当前状态设置为新移动状态。

看到区别?通过上述步骤,每次移动都从初始状态开始,而不是逐步应用于当前状态。

当然,你可以简化上面的一点(你真的不需要临时状态),但我试图让这个例子简单明了。

您的代码基本上是正确的,因为 正确地移动网格,您只是不将它应用于您打算将其应用于(初始状态)的网格(当前状态)。

希望这足以让你去这里。