如何修复返回的多余零

Spi*_*ter 2 java arrays copy

我试图将一个数组复制到一个新的,然后返回该新数组。问题是我只需要复制某个范围内的数组。

我做了一个for语句,将int i分配给决定起点的参数,并将其设置为运行直到到达决定终点的参数。

int[] newSound = new int[sound.length];

for (int i = start_index; i < end_index; ++i) {
    newSound[i] = sound[i];
}
return newSound;
Run Code Online (Sandbox Code Playgroud)

如果数组为[3,2,5,6,9],范围为[1,3],它将仅返回[2,5,6]。问题是,当我运行程序时,它返回[0,2,5,6,0]。有谁知道为什么会这样吗?

sma*_*c89 5

通过将数组创建为仅复制范围(start_indexend_index)的大小来进行修复:

int[] newSound = new int[end_index - start_index];
Run Code Online (Sandbox Code Playgroud)

您的循环现在应该是:

for (int i = start_index; i < end_index; ++i) {
    newSound[i - start_index] = sound[i];
}
Run Code Online (Sandbox Code Playgroud)

正如评论中所建议的那样,它Arrays.copyOfRange是上述的更好的选择,因为它可以处理越界索引和负范围。

像这样使用它:

int[] newSound = Arrays.copyOfRange(sound, start_index, end_index);
Run Code Online (Sandbox Code Playgroud)