2

我有一个类可以创建具有所需宽度和高度的字符画布。

在此我有一个方法 drawLetter() (它基本上改变了字符,使一个字母出现在画布上(就像非常简单的 ASCII 艺术)

我还有 3 种其他方法 rotateClockwise、flipHorizo​​ntal 和 FlipVertical

rotate 和 flipHorizo​​ntal 我做得很好,它们工作但我似乎无法弄清楚我在垂直翻转数组时出错的地方(出于兴趣,我认为我的水平和垂直方向错误,但我放了一个我正在尝试的样本在下面完成)

这是我无法解决的问题:

这个:

# # # ~
~ # ~ ~
~ # ~ ~
~ ~ ~ ~

对此:

~ # # #
~ ~ # ~
~ ~ # ~
~ ~ ~ ~

显然它将像我的其他方法一样在 for 循环中完成,下面我将发布我已经为水平完成的方法并顺时针旋转以证明它不是我做不到的作业

void mirrorHorizontally()
{
    char[][]horizontalImage = new char[height][width];

    for (int i = 0; i < height /2; i++)
    { 
       for(int j = 0; j < width; j++)
       {  
           horizontalImage[height - (i+1)][j] = canvasArray[i][j];           
           horizontalImage[i][j] = canvasArray[height - (i+1)][j];
       }
    }   
    printPicture(horizontalImage);
}


void rotateClockwise()
{
    char[][] rotatedImage = new char[height][width];

    for(int i=0; i< canvasArray.length; i++)
    {
        for(int j= canvasArray.length-1; j >= 0; j--)
        {
            rotatedImage[i][rotatedImage.length-1-j] = canvasArray[j][i]; 
        }
    }

    printPicture(rotatedImage);
}

canvasArray 是对 char[][] 类变量不感兴趣的原始图像

4

1 回答 1

3

这应该适合您的需求:

public static char[][] mirror(int width, int height, char[][] in) {
    char[][] out = new char[height][width];
    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {
            out[i][width - j - 1] = in[i][j];
        }
    }
    return out;
}

例如:

char[][] in = new char[][] {
    new char[] { '#', '#', '#', '~' },
    new char[] { '~', '#', '~', '~' },
    new char[] { '~', '#', '~', '~' },
    new char[] { '~', '~', '~', '~' },
    new char[] { '~', '~', '~', '~' }
};

for (char[] line : mirror(4, 5, in)) {
    for (char row : line) {
        System.out.print(row);
    }
    System.out.println();
}

印刷:

~###
~~#~
~~#~
~~~~
~~~~
于 2013-02-21T16:35:31.570 回答