public static void shiftLeft(int[][] array,int num, int rowSel) {
int m = array[rowSel].length;
int temp = array[rowSel][0];
for (int k=0; k<m-num; k++){
array[rowSel][k] = array[rowSel][k+num];
}
array[rowSel][m-num] = temp;
System.out.println("Final array: ");
for(int i = 0; i<array.length; i++){
for(int j=0;j<array.length;j++){
System.out.printf("%4d",array[i][j]);
}
System.out.println();
}
}
示例输出
Enter number of rows:
4
Enter number of columns:
4
ArrayA
12 12 10 14
18 5 2 0
16 1 2 2
17 15 6 15
Which row [0..3] do you want to shift to the left?
2
How many times?
3
Final array:
12 12 10 14
18 5 2 0
2 16 2 2
17 15 6 15
注意第3行将1更改为2
答案 0 :(得分:1)
你有两个问题。
首先,这个:
for (int k=0; k<m-num; k++){
array[rowSel][k] = array[rowSel][k+num];
}
您的循环终止条件k<m-num
很糟糕。对于你的情况:m = 4,num = 3,所以这只评估一次,因为它实际上是k<1
。
另外:当你复制时,你正在覆盖你的行......所以以后复制会冒再次复制相同数字的风险。我想你需要这样的东西:
int[] savedRow = new int[m];
for (int k=0; k<m; k++){
savedRow[k] = array[rowSel][k];
}
for (int k=0; k<m; k++){
array[rowSel][k] = savedRow[(k+num)%m];
}