0

私は本当にこの質問を何と呼ぶべきかわからなかったので、それを自由に編集してください...

基本的に私はchar[][]クラス変数"canvasArray[][]"を持っています

別の方法で、キャンバス上の文字を表す文字が入力されています(ASCIIアートのようになります)。

この画像を水平方向に反転させる方法があります

void mirrorHorizontally()
{
    char[][]horizontalImage = canvasArray;


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

    printPicture(horizontalImage);
}

char [] []の水平方向の画像をcanvasArrayの値に設定するだけでわかりますが、canvasArrayを印刷すると、同じように表示されるため、そうではないようです。

キャンバス配列を使用する必要がある他のメソッドがあるため、キャンバス配列を変更する必要があります

何か案は??

前もって感謝します

編集:私は恐れて答えたすべての人に感謝します答えはあなたが言ったすべての組み合わせのようなものなので、誰を受け入れるべきかわかりませんか?

4

3 に答える 3

3

私は次のようなものに行きます:

void mirrorHorizontally()
{
    char[][]horizontalImage = new char[horizontalImage.length][horizontalImage[0].length]; // assumes all lines have same length


    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);
}

このようにして、新しいバッファを作成し(古いバッファを参照して変更するのではなく)、それを直接使用して新しいバッファにデータを入力しています

于 2013-02-21T14:39:36.400 に答える
1

Javaでは配列はオブジェクトです。char[][]horizontalImage = canvasArray;したがって、両方horizontalImageを割り当てcanvasArrayて同じ配列オブジェクトを指す場合。これは、変更するhorizontalImageときにも変更することを意味しますcanvasArraycanvasArrayからの値を新しいにコピーする必要がありますhorizontalImage

編集:代わりにこれを試してください:

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

ループの前の割り当てを省略します。

于 2013-02-21T14:35:58.727 に答える
1

最初の呼び出しは、の古い値を消去します[height - (i+1)][j]。代わりに、その古い値を保存して、下で使用できるようにします。

char temp = horizontalImage[height - (i+1)][j];
horizontalImage[height - (i+1)][j] = horizontalImage[i][j];
horizontalImage[i][j] = temp;
于 2013-02-21T14:32:50.337 に答える