java - 将多维数组顺时针旋转 90 度
问题描述
我已经能够解决大部分问题。但是我的输出不断抛出异常。我确定这是小事,但我似乎无法弄清楚如何使这项工作正常进行。我将异常、最初对我说的任务以及到目前为止的代码包括在内:
使用公式array[j][n - 1 - i]
我得到以下异常:
线程“main”java.lang.ArrayIndexOutOfBoundsException 中的异常:com.company.Main.main(Main.java:20) 处长度为 4 的索引 -1 越界
如果我使用array[j][n - i]
我没有例外,但这不是正确的输出顺序。
坚持了一周!
给定一个大小为矩形的数组
n×m
。通过将结果记录到大小为 m×n 的新数组中,将其顺时针旋转 90 度。输入数据格式:
输入两个数字
n
和m
,不超过 100,然后输入一个数组n×m
大小。输出数据格式:
输出结果数组。在输出中用一个空格分隔数字。
样本输入 1:
3 4 11 12 13 14 21 22 23 24 31 32 33 34
样本输出 1:
31 21 11 32 22 12 33 23 13 34 24 14
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int[][] array = new int[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
array[i][j] = scanner.nextInt();
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
System.out.print(array[j][n - 1 - i] + " ");
}
System.out.println("");
}
}
}
解决方案
如果您只是将其旋转 90 度,那么您只是从行尾开始到行首,同时左右移动列。所以你的代码应该是:
int n = 3;
int m = 4;
int[][] array = {
{11, 12, 13, 14},
{21, 22, 23, 24},
{31, 32, 33, 34}};
for (int col = 0; col < m; col++) {
for (int row = n - 1; row >= 0; row--) {
System.out.print(array[row][col] + " ");
}
System.out.println("");
}
推荐阅读
- python - 为什么 p[:] 在这两种情况下的工作方式不同?
- java - 使用 KeyCloak 的多租户 Quarkus?
- javascript - 将 0 值自动填充到未定义的 xAxes
- c# - 如何在没有身份验证和授权方法的情况下保护公共端点
- powershell - 如何通过 powershell 解析最新的 DNS CName 结果
- sql - 从每个组中获取特定行
- c++ - 终端不断缓冲按下的键
- python - 在python和cpython的上下文中,“.c.src”文件是ac源代码文件吗?如何编译这种文件?
- c++ - C++ 中的 noexcept 如何改变程序集?
- python - Tensorflow,从具有特定令牌 ID 的输入中选择嵌入并对结果进行批处理