[英]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.