我正在尝试将数组的某些元素复制到另一个元素中。例如,我想将行的索引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]);
}
答案 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
正如您所看到的,这只是抵消索引,而不是将其相乘......并且只要i
为lines.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次迭代中破裂。您可以看到您根本不访问每三个元素,而是访问每个元素,并且将它存储在偏移位置,这会导致索引超出范围异常。