顺时针旋转一个字符串或字符90度

时间:2015-04-24 16:45:01

标签: java

伙计们,我很难顺时针旋转一个形状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++;
        }

    }

1 个答案:

答案 0 :(得分:0)

我不太了解你的方法以及你的困难在哪里。我也不明白为什么你有这么多未使用的字段。您可能需要设置cB1width字段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,连接等)。如果你在长循环中执行它们,可能会很快耗尽内存。