Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不使用存储阵列的情况下将二维阵列旋转90度?_Java_Arrays_Matrix_Multidimensional Array_Rotation - Fatal编程技术网

Java 如何在不使用存储阵列的情况下将二维阵列旋转90度?

Java 如何在不使用存储阵列的情况下将二维阵列旋转90度?,java,arrays,matrix,multidimensional-array,rotation,Java,Arrays,Matrix,Multidimensional Array,Rotation,我被指示不要使用存储阵列来完成此任务。基本上,我们必须创建一个函数,将2d数组的内容旋转90度 因此,如果我从这个数组开始: int[][]数组={{1,2,3},{4,5,6},{7,8,9}; 函数应返回如下数组: {{7,4,1}, {8,5,2}, {9,6,3}} 同样,我们不允许在函数中使用创建的数组进行存储。 甚至不使用存储阵列也可以实现这一点吗?您可以通过逐个交换上半部分和下半部分来旋转/转置阵列: import java.util.*; import java.lang.*

我被指示不要使用存储阵列来完成此任务。基本上,我们必须创建一个函数,将2d数组的内容旋转90度

因此,如果我从这个数组开始:

int[][]数组={{1,2,3},{4,5,6},{7,8,9};
函数应返回如下数组:

{{7,4,1}, {8,5,2}, {9,6,3}}
同样,我们不允许在函数中使用创建的数组进行存储。
甚至不使用存储阵列也可以实现这一点吗?

您可以通过逐个交换上半部分和下半部分来旋转/转置阵列:

import java.util.*;
import java.lang.*;
import java.io.*;

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        // your code goes here
        int[][] array = new int[][] {
            new int[] { 1, 2, 3},
            new int[] { 4, 5, 6},
            new int[] { 7, 8, 9},
        };

        for (int row = 0; row < 3; row++) {
            for (int col = 0; col < row; col++) {
                int t = array[row][col];
                array[row][col] = array[col][row];
                array[col][row] = t;
            }
        }

        for (int row = 0; row < 3; row++) {
            System.out.println(Arrays.toString(array[row]));
        }
    }
}
import java.util.*;
导入java.lang.*;
导入java.io.*;
表意文字
{
公共静态void main(字符串[]args)引发java.lang.Exception
{
//你的密码在这里
int[][]数组=新int[][]{
新的int[]{1,2,3},
新的int[]{4,5,6},
新的int[]{7,8,9},
};
对于(int行=0;行<3;行++){
for(int col=0;col
我们可以直接打印旋转矩阵,而无需保存结果,如下所示:首先迭代列,然后迭代行,然后打印点。因为我们事先不知道行的长度,即列的数量,所以我们迭代到,并在每一步检查列是否仍然存在

该算法的其余部分与创建转置2d阵列时相同。点的索引
[i][j]
变为
[j][i]
,但其中一条边的索引变为等于
边的长度减去边的当前索引减去1
。索引从0开始

int[][]数组={
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}};
for(int col=0;col
输出(逆时针旋转90º⟲):


另见:

 4  8 12 
 3  7 11 
 2  6 10 
 1  5  9