将阵列向左移动4个单元格

时间:2017-01-28 13:03:12

标签: java arrays

我希望移动一个给定的数组,例如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 我做错了什么,我该如何解决?

1 个答案:

答案 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