我希望移动一个给定的数组,例如4个单元格,然后用0填充移位的位置。这就是我所做的:
public class LinearArray{
public static void main(String [] args){
int [] b = {10, 20, 30, 40, 50, 60};
shiftLeft(b,4);
printArray(b); // This Should Print: { 40, 50, 0, 0, 0, 0 };
}
public static void shiftLeft(int [] source, int k){
for(int i=0,j=i+k;i<source.length-k;i++,j++){
source[i]=source[j];
source[j]=0;
}
}
}
但不是输出40,50,0,0,0,0 我得到50分,60分,30分,40分,0分,0分 如果我设置k = 5而不是4我得到60,20,30,40,50,0 我做错了什么,我该如何解决?
答案 0 :(得分:2)
您的for
条件错误:例如k=4
条件为i < 2
- 循环体执行2次,每次设置2个值=&gt;您的代码甚至没有机会更改所有数组条目。
必须更改循环逻辑,例如:
public static void shiftLeft(int [] source, int k){
int newLength = source.length - k;
for(int i = 0; i < source.length; i++) {
source[i] = i < newLength ? source[i + k] : 0;
}
}
确保身体完全执行source.length
次。每一步都改变一个值。它改变的值取决于当前索引是否小于最终应该非零的条目数。如果它较低,则该值等于索引处的原始值+(条目数)。否则,值为0
。