gpt4 book ai didi

java - 嵌套 for 循环中的手动数组复制

转载 作者:行者123 更新时间:2023-11-29 08:30:50 25 4
gpt4 key购买 nike

我试图找到所有 2,将它们移到数组的后面,然后将它们变成 0,而不丢失数组的顺序。例如,[1,2,3,2,2,4,5] 将变为 [1,3,4,5,0,0,0]。我的代码工作正常,但 IDE 告诉我嵌套的 for 循环正在手动复制数组,并希望我将其替换为 System.arraycopy()。我该怎么做呢?

代码如下所示:

    int[] numbers = {1,2,3,2,2,4,5};
for (int i = 0; i < numbers.length; i++){
if (numbers[i] == 2){
for (int j = i; j < numbers.length - 1; j++){
numbers[j] = numbers[j + 1];
}
numbers[numbers.length-1] = 0;
i --;
}
}

最佳答案

声明如下:

for (int j = i; j < numbers.length - 1; j++){
numbers[j] = numbers[j + 1];
}

可以替换为:

System.arraycopy(numbers, i + 1, numbers, i, numbers.length - 1 - i);

像 IntelliJ 这样的 IDE 应该会在您按 alt + enter(默认组合键)时自动提出建议。


现在关于arraycopy()

根据文档,java.lang.System.arraycopy()将从源数组(第一个参数)复制 n 个元素(最后一个参数)到目标数组(第三个参数),并从(第二个和第四个参数)开始相应的索引。

更具体地说,当调用arraycopy(numbers, i + 1,numbers, i,numbers.length - 1 - i)时,参数是:

  1. numbers:源数组。
  2. i + 1:源数组中的起始位置。
  3. numbers:目标数组。
  4. i:目标数据中的起始位置。
  5. numbers.length - 1 - i:要复制的数组元素数量。

在您的情况下,元素将从您的数组复制到其自身,但源起始位置从目标起始位置移动的事实将导致您所追求的全局移动(将元素移动到左侧) )。

关于要移动的元素数量,它应该移动 i 个元素减去第一个不移动且仅被覆盖的元素。因此长度 - 1 - i

关于java - 嵌套 for 循环中的手动数组复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48378742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com