我有一个二维数组,我需要顺时针旋转 90 度,但是我一直在获取 arrayindexoutofbounds…
public int[][] rotateArray(int[][] arr) {
// first change the dimensions vertical length
// for horizontal length and vice versa
int[][] newArray = new int[arr[0].length][arr.length];
// invert values 90 degrees clockwise by starting
// from button of array to top and from left to right
int ii = 0;
int jj = 0;
for (int i = 0; i < arr[0].length; i++) {
for (int j = arr.length - 1; j >= 0; j--) {
newArray[ii][jj] = arr[i][j];
jj++;
}
ii++;
}
return newArray;
}
原文由 user69514 发布,翻译遵循 CC BY-SA 4.0 许可协议
我不明白你的循环逻辑 - 不应该是
每个索引是否上升,如
i
此处,或下降,如j
此处(以及是否需要在分配中“翻转”其中一个或两个,例如使用arr.length-1-j
in lieu of plainj
on one side of the=
in the assignment;-), sincearr
dimensions arearr.length
byarr[0].length
, and vice versa fornewArray
, it seems to me that the first index onarr
(second onnewArray
) 必须是跨越从 0 到arr.length-1
范围的那个,另一个范围是另一个索引。这是一种“基本量纲分析”(除了“量纲”的使用意义与通常与“量纲分析”不同,后者指的是物理量纲,即时间、质量、长度等)。 “翻转”和让每个循环上升或下降的问题取决于对你的意思的准确形象化,我不是最伟大的“心理形象化者”所以我认为,在现实生活中,我会尝试这个“轴换位”,直到我找到那个意思;-)。