gpt4 book ai didi

java - 如何将 3x3 二维数组顺时针旋转 n 次

转载 作者:行者123 更新时间:2023-11-30 07:59:47 24 4
gpt4 key购买 nike

这些是我的循环语句。第一个循环显示非旋转 block ,而第二个循环旋转并显示二维数组 n(用户输入)次。我的问题是 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();
}
}

最佳答案

您当前的旋转代码据我所知是错误的,因为您只是转置数组。这样做两次实际上是空操作,因为它使矩阵保持原始状态。将矩阵旋转 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;
}
}

我从 this Quora article 改编了这个就地矩阵旋转代码.

关于java - 如何将 3x3 二维数组顺时针旋转 n 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39029730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com