我试图将一个元素添加到Java中数组的最后一个位置,但我无法... 或者更确切地说,我不知道该怎么做。这是目前的代码:
String[] values = split(line, ",");
int[][] coordinates = new int[2][values/2];
for(int i = 0; i < values.length; i++) {
if(i % 2 == 0) { //THIS IS EVEN VALUES AND 0
coordinates[0][coordinates[0].length] = values[i];
} else { //THIS IS ODD VALUE
coordinates[1][coordinates[1].length] = values[i];
}
}
编辑版本:
String[] values = split(line, ",");
int[][] coordinates = new int[2][values/2];
int x_pos = 0;
int y_post = 0;
for(int i = 0; i < values.length; i++) {
if(i % 2 == 0) { //THIS IS EVEN VALUES AND 0
coordinates[0][x_pos] = values[i];
x_pos++;
} else { //THIS IS ODD VALUE
coordinates[1][y_pos] = values[i];
y_pos++;
}
}
值正在从 CSV 文件中读取。我认为我的代码是错误的,因为在这两种情况下它都会尝试始终以最大数组大小添加坐标[]的值。
我该如何将它们添加到最后设置的位置?
谢谢!
/e:编辑后的版本正确吗?
最佳答案
您的原始代码有两个问题:
- 它对数组的寻址很糟糕,Java 数组中的 las 元素位于
length-1
位置,这将导致ArrayOutOfBoundsException
- 即使你通过减 1 来纠正它,你也总是只会覆盖最后一个元素,因为 Java 数组的长度与它包含的元素数量无关,而与它包含的元素数量有关。它被初始化为包含的元素。
而不是:
coordinates[0][coordinates[0].length] = values[i];
您可以使用:
coordinates[0][(int)Math.round(i/2.0)] = values[i];
(当然,与坐标[1]...
相同)
编辑 这当然很丑陋:
(int)Math.round(i/2.0)
但我使用的解决方案远不那么容易理解:
i>>1
这是一个右移运算符,正是这里需要的东西,并且比其他所有方法都要快......
结论:这将在现场场景中使用:
使用
coordinates[0][i>>1] = values[i];
编辑2 一个人每天都会学到新东西......
这同样好,也许慢一点。
coordinates[0][i/2] = values[i];
关于java - 将元素添加到数组的最后一个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12912053/