伙计们,我很难顺时针旋转一个形状90度。我在完成它时遇到了麻烦。如果有形状:
.t.
ttt
方法rotateBy90()
顺时针旋转上述形状90度,因此它将是以下输出:
t.
tt
t.
形状为String
类型。
在这里,我有,我很确定我完全做错了。该方法可以使用char[][]
,char[]
,String[]
或String[][]
来完成。另一个问题是rotateBy90()
是void
方法。 COuld smb请帮我这个旋转算法?提前谢谢!
import java.util.*;
public class CreateShape {
private int height;
private int width;
private char dc;
private Rotation initialPos;
private Rotation nextPos;
private char[][] shape = new char[height][width];
String[] shapeLayout = new String[height];
String[] rotatedArray;
public CreateShape(int height, int width, char dc)
{
this.height = height;
this.width = width;
this.dc = dc;
initialPos = Rotation.CW0;
}
public void rotateBy90()
{
nextPos = initialPos.next();
String newLayout = "";
int count = 0;
String[] newMatrixColumns= shape.split("\n");
while (count < shape.split("\n")[0].length()) {
for (int i = newMatrixColumns.length - 1; i > -1; i--) {
newLayout += newMatrixColumns[i].charAt(count);
}
newLayout = newLayout + "\n";
count++;
}
}
答案 0 :(得分:0)
我不太了解你的方法以及你的困难在哪里。我也不明白为什么你有这么多未使用的字段。您可能需要设置cB1
和width
字段height
,因为在这种情况下它们不应该真正改变。
我个人认为到目前为止最简单的方法是使用final
。您只需迭代初始char[][]
并将元素放在新char[][]
的适当位置即可。所以在你的方法中你会有像
char[][]
谨慎提醒:小心弦乐。许多字符串操作涉及创建其他字符串(public void rotateBy90()
{
// bla bla
char[][] tempShape = new char[width][height];
for(int j = 0; j < width; j++) {
for(int i = 0; i < height; i++) {
tempShape[...][...] = myShape[i][j]; //I'll leave this as exercise
}
}
myShape = tempShape;
}
,split
,连接等)。如果你在长循环中执行它们,可能会很快耗尽内存。