我正在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} <
} }
有关如何修复移动方法以使其正确移动的任何想法吗?
由于
答案 0 :(得分:1)
好像你将L相对于其最后位置移动,但在左侧示例中row
和col
指定顶部“o”的绝对位置。
答案 1 :(得分:0)
关闭grexter89的答案,假设move(r,c)
应该将L放在该位置(而不是将L移动指定的数量 - 如果我错了,请纠正我):
您的程序的行为与您告诉它的行为完全相同:
你的举动是递增的,因为这是你写的程序。对于这些类型的事物,可以将其视为“翻译”:用英语(或其他)表达您想要做的事情,然后将翻译成您的代码。如果上述两个步骤不是您想要做的,那么您就是从错误的想法开始的。
看起来你真正想要做的就是这个。首先定义一个初始状态,其中L位于左上角,当您开始时,将当前状态设置为该初始状态。然后移动这样做:
看到区别?通过上述步骤,每次移动都从初始状态开始,而不是逐步应用于当前状态。
当然,你可以简化上面的一点(你真的不需要临时状态),但我试图让这个例子简单明了。
您的代码基本上是正确的,因为 正确地移动网格,您只是不将它应用于您打算将其应用于(初始状态)的网格(当前状态)。
希望这足以让你去这里。