java - 将数组向左移动 4 个单元格

标签 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 我做错了什么以及如何解决它?

最佳答案

您的for条件错误:例如k=4条件是 i < 2 - 循环体执行 2 次,每次设置 2 个值 => 您的代码甚至没有机会更改所有数组条目。

你的循环逻辑必须改变,例如:

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 .

关于java - 将数组向左移动 4 个单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41910091/

相关文章:

java - 使用JLayer播放mp3资源

java - 如何使用 Maven 构建独立的 SWT GUI?

java - 如何将一个int按数字转换为数组数字

java - 根据一些预定义的类别标记单词

java - 递归定义中的堆栈溢出错误

java - 使用 for 循环的模式

c# - 如何将长数组转换为字节数组?

arrays - 使用flutter从Firestore获取用户数组数据

python - Numpy 数组切片与 for 循环结果

java - 如何获取 Java 数组中定义可用空间开始和结束的索引