Java:System.arraycopy用于2个数组部分

时间:2017-02-02 22:49:08

标签: java arrays

假设我有一个声明为

的数组
int[] unordered = {3, 4, 5, 1, 2};

我想创建一个新数组a,其大小比unordered大25%,原始内容按顺序排列,然后是尚未赋值的索引(即1,2,3,4,5,0,0,0)。我如何使用System.arraycopy执行此操作?目前,我所拥有的是:

int[] a = new int[(int)(unordered.length*.25)];
System.arraycopy(items, 3, a, 0, unordered.length-3);
System.arraycopy(items, 0, a, unordered.length-3, 3);

当我运行此代码时,我得到一个数组越界错误。

1 个答案:

答案 0 :(得分:5)

改变这个:

int[] a = new int[(int)(unordered.length*.25)];

要:

int[] a = new int[(int)(unordered.length*1.25) + 1];

由于int cast正在降低数量(例如3.5 - > 3等),您应该在数组大小中添加一个。

还要乘以1.25以增加数组大小,乘以0.25会减小大小。