我需要帮助重写函数,以便System.arraycopy()
执行函数所做的工作。
例如,我的代码:
for( int k = 0; k <= i - 1; k++ ) {
a[ j + k ] = a[ j + k + 1 ];
}
相当于:
System.arraycopy( a, j + 1, a, j, i );
但我无法弄清楚如何做到这一点:
for ( int k = n; k > i; k-- ) {
a[ j + k ] = a[ j + k - 1 ];
}
感谢您的任何意见。
答案 0 :(得分:1)
让我们先简化,因为你的第二个循环似乎比必要的复杂一点。当n = 3,i = 1,j = 2时,你的循环会将a = [1,2,3,4,5,6,7]变换为a = [1,2,3,4,4,5, 7]。换句话说,循环将n-i个元素向右移位一个位置,从索引j + i开始。所以,实际上你只需要两个参数而不是三个参数。 (让我们将它们定义为x = n-i和y = j + i。)
现在,给出System.arraycopy()
如果src和dest参数引用相同的数组对象,则执行复制,就好像位置srcPos到srcPos + length-1的组件首先被复制到具有长度组件的临时数组,然后是临时数组被复制到目标数组的destPos + length-1的destPos位置。
我的结论是System.arraycopy(a, y, a, y+1, x);
做了你想要的。或者,如果您使用的变量是给定的System.arraycopy(a, j+i, a, j+i+1, n-i);
。
我没有测试过,所以让我知道它是否有效;)
答案 1 :(得分:0)
看起来你的第二个循环打算将元素i(不包括)从n(包括)移动到右边的一个位置:
System.arraycopy(a, i + 1, a, i + 2, n - i);