public static int[][] shift(final int[][] original, final int amount) {
int[][] shifted = new int[original.length][original[0].length];
for (int col = 0; col < original.length; col++) {
for (int row = 0; row < original[col].length; row++) {
shifted[col][row] = FILL_VALUE;
}
for (int cols = 0; cols < original.length + amount; cols++) {
for (int rows = 0; rows < original[cols].length; rows++) {
if (cols - amount < original.length) {
shifted[cols][rows] = original[cols - amount][rows];
}
}
}
}
return shifted;
}
您好, 我正在尝试编写一个方法,将我的2-D数组中的元素向左移动一些任意数量。我不想将值循环回来,而是用一些已经预定义的fill_value填充空数组。如果移位量大于原始长度,我只返回一个只有fill_value的图像。但是,此函数抛出arrayindexoutofbound错误。但我想不出我应该如何改变我的for循环来修复错误。任何帮助表示赞赏!谢谢!
答案 0 :(得分:1)
我相信它是因为在你的第二个外部for循环中,条件是cols&lt;长度+金额,如果金额> 1,它将继续超过数组的边缘。你可以使用调试器逐步调试你的代码,看看它的确切位置。
答案 1 :(得分:0)
由于以下行发生错误:
shift [cols] [rows] = original [cols - amount] [rows];
当cols = 0,rows = 0,amount = 2(比如说)时,它试图访问不存在的原始[-2] [0]。
相反,您可以使用以下内容:
public class overflow1 {
static int a[][] = {{1,2,3,4,5,6},{2,3,4,5,6,7},{3,4,5,6,7,8}, {4,5,6,7,8,9}, {5,6,7,8,9,10}, {6,7,8,9,10,11}};
static int b[][] ;
static int FILL_VALUE =0;
public static int[][] shift(final int[][] original, final int amount) {
int[][] shifted = new int[original.length][original[0].length];
for (int col = 0; col < original.length; col++) {
for (int row = 0; row < original[col].length; row++) {
shifted[col][row] = FILL_VALUE;
}
for (int cols = 0; cols < original.length ; cols++) {
for (int rows = 0; rows < original[cols].length; rows++) {
if (cols - amount >=0) {
shifted[cols][rows] = original[cols - amount][rows];
}
}
}
}
return shifted;
}
public static void main(String[] arggs) {
b=shift(a,2);
System.out.println("Original array:");
for(int i=0; i<a.length; i++){
for (int j=0; j<a[i].length; j++){
System.out.print(a[i][j]+ ":");
}
System.out.println();
}
System.out.println("After shift by 2 array:");
for(int i=0; i<b.length; i++){
for (int j=0; j<b[i].length; j++){
System.out.print(b[i][j]+ ":");
}
System.out.println();
}
}
}
以下是样本的输出:
原始阵列:
1:2:3:4:5:6:
2:3:4:5:6:7:
3:4:5:6:7:8:
4:5:6:7:8:9:
5:6:7:8:9:10:
6:7:8:9:10:11:
换班后2,数组:
0:0:0:0:0:0:
0:0:0:0:0:0:
1:2:3:4:5:6:
2:3:4:5:6:7:
3:4:5:6:7:8:
4:5:6:7:8:9: