我想将给定的数组移动 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/