我有一个二维数组,我需要顺时针旋转90度,但是我一直在获取arrayindexoutofbounds …
public int[][] rorateArray(int[][] arr){ //first change the dimensions vertical length for horizontal length //and viceversa 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; }
我不了解您的循环逻辑-不应该
for(int i=0; i<arr[0].length; i++){ for(int j=arr.length-1; j>=0; j--){ newArray[i][j] = arr[j][i]; } }
减去每个索引是i在此处像是在上升还是下降(j在这里)(以及是否需要在分配中“翻转”一个或两个,例如arr.length-1-j在分配中使用j一侧的普通内容=;-) ,因为arr维度是arr.lengthby的arr[0].length,而对于newArray,反之亦然,在我看来,arr(的第二个索引)上的第一个索引newArray必须是从0到include的范围arr.length-1,另一个索引的范围是另一个。
i
j
arr.length-1-j
=
arr
arr.length
arr[0].length
newArray
arr.length-1
这是一种“基本尺寸分析”(除了“尺寸”的使用方式与通常指物理尺寸(即时间,质量,长度,c)的“尺寸分析”不同)。“翻转”和使每个循环向上或向下循环的问题取决于准确地可视化您的意思,而我并不是最伟大的“心理可视化器”,因此,我认为,在现实生活中,我会尝试这种“轴换位”,直到我击中了这个意思;-)。