初学者的问题:复制数组的某些元素

时间:2010-08-10 19:02:37

标签: java arrays

我正在尝试将数组的某些元素复制到另一个元素中。例如,我想将行的索引0复制到链接的索引0,将索引3的行复制到链接的索引1,依此类推(基本上基本上每3行元素)。

到目前为止,我一直得到一个ArrayIndexOutOfBound错误。谢谢你的帮助!

String[] lines = inputString.split(System.getProperty("line.separator"));
String[] links = new String[lines.length]; 
int j = 0;

for (int i = 0; i < lines.length; i++) {
   links[i] = lines[j+3];
   j++;
   System.out.println(links[i]);
}

3 个答案:

答案 0 :(得分:4)

听起来你需要将i增加3,而不是将{3}增加到j(但随后将j增加1只)。实际上,您根本不需要两个变量:

for (int i = 0; i < lines.length; i += 3) {
    links[i / 3] = lines[i];
}

您还应该将代码更改为仅根据需要创建数组:

String[] links = new String[lines.length / 3];

为了感兴趣,让我们看看你的代码实际试图做什么,就任务而言:

links[0] = lines[3];
links[1] = lines[4];
links[2] = lines[5];
// etc

正如您所看到的,这只是抵消索引,而不是将其相乘......并且只要ilines.length-3,您就会结束与

links[lines.length - 3] = lines[lines.length]; // Bang!

答案 1 :(得分:0)

一些问题:

1。 你可能想要这个:

for (int i = 0; i < lines.length; i++) {
    links[i] = lines[j+3];

看起来像这样:

for (int i = 0; i < links.length; i++) {
    links[i] = lines[j * 3];

2。 嗯,是。你出局了。假设lines是12个元素。 links大小相同,所以你试图从15/36元素中读取(取决于我在#1中的修正)

解决方案是让links更小:

String[] links = new String[(int)(lines.length / 3)];

随着#1的修正。

答案 2 :(得分:0)

Jon Skeet有正确的想法。可能有用的是学习如何自己调试这些东西。假设lines.length是5,也意味着links.length是5.如果跟踪for循环的每次迭代会发生什么?

i        |      j       |     j + 3       
-----------------------------------------
0               0               3       
1               1               4
2               2               5

它会在第3次迭代中破裂。您可以看到您根本不访问每三个元素,而是访问每个元素,并且将它存储在偏移位置,这会导致索引超出范围异常。