如何在Java中旋转二维数组



[已解决]

这个问题的标题很模糊,但希望这能澄清问题。

基本上,我正在寻找的是一个旋转这组数据的解决方案。这些数据是以特定的方式设置的。

以下是输入和输出的示例:

输入:

3
987
654
321

输出:

123
456
789

"3"表示将要使用的列和行的数量。如果您输入数字"4",您将被允许输入4组4个整数。

输入:

4
4567
3456
2345
1234

输出:

1234
2345
3456
4567

目标是找到一种只在需要时旋转数据的方法。你必须确保最小的角号在左上角。例如,对于上面的代码,您旋转了它,使1位于左上角。

我遇到的问题是我不知道如何旋转数据。我只能旋转边角,而不能旋转边角。到目前为止,我的代码就是这样做的:

  • 接受每一行的输入并将其转换为字符串
  • 将这些字符串拆分为单独的字符
  • 将这些字符存储在数组中

我只是不知道如何比较这些字符,并最终旋转数据。

任何帮助都将不胜感激!任何问题都将得到解答。

此处对该问题进行了详细描述(问题J4(。这只是我为明年的比赛安排的一个练习挑战,所以给我答案不会"破坏"这个问题,反而会帮助我学习。

这是我到目前为止的代码:

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
int max = kb.nextInt();
int maxSqrt = (max * max);
int num[] = new int[max];
String num_string[] = new String[max];
char num_char[] = new char[maxSqrt];
int counter = 0;
int counter_char = 0;

for (counter = 0; counter < max; counter++) {
num[counter] = kb.nextInt();
}
for (counter = 0; counter < max; counter++) {
num_string[counter] = Integer.toString(num[counter]);
}
int varPos = 0, rowPos = 0, charPos = 0, i = 0;
for (counter = 0; counter < maxSqrt; counter++) {
num_char[varPos] = num_string[rowPos].charAt(charPos);
i++;
if (i == max) {
rowPos++;
i = 0;
}
varPos++;
if (charPos == (max - 1)) {
charPos = 0;
} else {
charPos++;
}
}
//

for(int a = 0 ; a < max ; a++){
for(int b = 0 ; b < max ; b++)
{
num_char[counter_char] = num_string[a].charAt(b);
counter_char++;
}
}
//here is where the code should rotate the data


}

}

这是2D阵列的标准顺时针旋转90度。

我在下面提供了解决方案,但首先有几点意见。

你说你在做这个:

  1. 接受每一行的输入并将其转换为字符串
  2. 将这些字符串拆分为单独的字符
  3. 将这些字符存储在数组中

首先,您基本上将int矩阵转化为字符矩阵。我认为您不需要这样做,因为即使您确实想比较值,也可以使用提供的int。

其次,不需要比较矩阵中的任何2个数据元素,因为旋转不取决于任何值。

以下是一个适用于java的解决方案,最初由Nick Berardi用C#编写,用于解决问题

private int[][] rotateClockWise(int[][] matrix) {
int size = matrix.length;
int[][] ret = new int[size][size];
for (int i = 0; i < size; ++i) 
for (int j = 0; j < size; ++j) 
ret[i][j] = matrix[size - j - 1][i]; //***
return ret;
}

如果你想做逆时针旋转,用代替星形线

ret[i][j] = matrix[j][size - i - 1]

最新更新