2

希望の幅と高さの文字のキャンバスを作成するクラスがあります。

この中に私はメソッド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[][]クラス変数に関係のない元の画像です。

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 に答える