如何获得以下程序的输出123346: 5去哪了?
public class TestClass {
public static void main(String[] args) {
int[] scores = { 1, 2, 3, 4, 5, 6};
System.arraycopy(scores, 2, scores, 3, 2);
for(int i : scores)
System.out.print(i);
}
}
答案 0 :(得分:2)
您在技术上覆盖5
(以及4
)。请参阅documentation。
源和目标对象相同,您的length
参数为2
,而索引不同,因此,每个索引处的两个数字将被复制那些职位。
来源数字和职位:
1 2 [3 4] 5 6
目的地职位:
1 2 3 [4 5] 6
结果:
1 2 3 [3 4] 6
答案 1 :(得分:2)
System.arraycopy(scores, 2, scores, 3, 2);
这会将2个项目从源索引2复制到{3,4}到目标位置3.由于您的源阵列和目标阵列是相同的,因此您将用4覆盖5
{3 4} <== items copied
{ 1, 2, 3, 4, 5, 6} <== original
0 1 2 3 4 5 <== indexes
{ 1, 2, 3, 3, 4, 6} <== output, the 4 has overwritten the 5, damn
答案 2 :(得分:1)
这不是一段非常有用的代码,但您所做的是将从索引2开始的源数组中的2个元素复制到以索引3开头的数组。
实际上你到达时: 1,2,3,3,4,6
System.arraycopy将元素从源数组复制到目标数组。方法签名是:
arraycopy(sourceArray, sourceIndex, destinationArray, destinationIndex, howManyElementsToCopy)
。
您所做的是将数组指定为源和目标。因此,您的代码开始将元素从源数组(第一个参数 - 得分)复制到目标数组(第三个参数 - 得分)。它复制了2个元素(最后一个方法参数 - 2)。它开始将元素从索引2处的源数组(方法中的第二个参数)复制到以索引3(第四个参数)开始的目标数组。
可视化:
INDEX: 0 1 2 3 4 5
3, 4 <- values that are copied (2 elements from index 2)
source: [1, 2, 3, 4, 5, 6]
4, 5 <- those valuse are overwriten (2 elements from index 3)
destination: [1, 2, 3, 4, 5, 6] <- in your case the same array as source
3, 4 <- values from source copied into destination
result: [1, 2, 3, 3, 4, 6]
答案 3 :(得分:0)
以下是来自javadoc的arrayCopy的方法签名: public static void arraycopy(Object src, int srcPos, 对象dest, int destPos, int length)
在你的电话中:arrayCopy(分数,2,分数,3,2);第二个参数是从哪里开始复制的源位置(在数组中为2和索引&#39; 3&#39;)。
阵列索引:0 1 2 3 4 5
得分1 2 3 4 5 6
同样,第四个参数是目标位置(在您的数组中为3并且索引&#39; 4&#39;
阵列索引:0 1 2 3 4 5
得分1 2 3 4 5 6
最后,最后一个参数是要复制的字符串的长度(即2),因此在位置3复制3和4以提供输出
阵列索引0 1 2 3 4 5
得分1 2 3 3 4 6