簡體   English   中英

如何將3x3 2d陣列順時針旋轉n次

[英]How to rotate 3x3 2d array clockwise by n times

這些是我的循環語句。 第一個循環顯示未旋轉的塊,而第二個循環旋轉並以n(用戶輸入)次顯示2d數組。 我的問題是2d陣列將旋轉一次,但不會旋轉第三次及之后的時間。 我希望我的2d數組每次顯示時都順時針旋轉90度。

        rot = x.nextInt(); //user input for n rotations
        //initial block
        System.out.println("1");
        for(i=0; i<block.length; i++)
            {
                for(j=0; j<block[i].length; j++)
                    System.out.print(block[i][j]+"\t");
                System.out.println();
            }
        //rotated block
        for(cnt=2; cnt<=rot; cnt++)
        {
            System.out.println(cnt);
            for(i=0; i<block.length; i++){
                for(j=block.length-1; j>=0; j--){
                    newBlock[i][j] = block[j][i];
                    System.out.print(newBlock[i][j]+"\t");
                }
                System.out.println();
            }
        }

您當前的旋轉代碼是錯誤的AFAIK,因為您只是在轉置數組。 兩次執行此操作實際上是一個空操作,因為它使矩陣保持原始狀態。 您應該直觀地知道,將矩陣旋轉兩次90度(即旋轉180度一次)通常不應使矩陣保持不變。 請嘗試以下旋轉代碼:

int dim = block.length;

for (int i=0; i <= (dim - 1)/2; i++) {
    for (int j=i; j < dim - i - 1; j++) {
        int p1 = block[i][j];
        int p2 = block[j][dim-i-1];
        int p3 = block[dim-i-1][dim-j-1];
        int p4 = block[dim-j-1][i];

        block[j][dim-i-1] = p1;
        block[dim-i-1][dim-j-1] = p2;
        block[dim-j-1][i] = p3;
        block[i][j] = p4;
    }
}

我從Quora文章中改編了此原位矩陣旋轉代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM