翻转多维数组java

时间:2013-02-21 16:24:18

标签: java arrays multidimensional-array

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

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

我还有其他3种方法rotateClockwise,flipHorizo​​ntal和flipVertical

旋转和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 [] []类变量

中感兴趣的原始图像

1 个答案:

答案 0 :(得分: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();
}

打印:

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