我试图在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:EDITED VERSION会不正确?
答案 0 :(得分:1)
您的原始代码有两个问题:
length-1
位置,这将导致ArrayOutOfBoundsException
length
与它包含的元素数量无关,但是它有多少个元素初始化为包含。而不是:
coordinates[0][coordinates[0].length] = values[i];
您可以使用:
coordinates[0][(int)Math.round(i/2.0)] = values[i];
(当然,与coordinates[1]...
相同)
修改强> 这当然很难看:
(int)Math.round(i/2.0)
但我使用的解决方案却不那么容易理解:
i>>1
这是一个右移操作员,完全是这里需要的东西,并且比其他方法更快......
结论:这将在实时场景中使用:
使用
coordinates[0][i>>1] = values[i];
<强> EDIT2 强> 一个人每天都学到新东西......
这同样好,可能有点慢。
coordinates[0][i/2] = values[i];
答案 1 :(得分:1)
如果你知道你肯定会有偶数values
你可以做到
for(int i = 0; i < values.length / 2; i++) {
coordinates[0][i] = values[2*i];
coordinates[1][i] = values[2*i + 1];
}
答案 2 :(得分:0)
你必须将最后一个位置存储在某个地方。 .length
为您提供数组的大小。
数组中的位置始终是i
的一半(因为你将一半的元素放在一个数组中而另一半放在另一个数组中)。
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][ i / 2] = values[i];
} else { //THIS IS ODD VALUE
coordinates[1][ i / 2 + 1 ] = values[i];
}
}
答案 3 :(得分:0)
java的数组索引是从“0”到“数组长度 - 1”。
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html
数组中的每个项都称为元素,每个元素都由其数字索引访问。如上图所示,编号从0开始。例如,第9个元素将在索引8处访问。
答案 4 :(得分:0)
为什么不:
String[] values = split(line, ",");
int[][] coordinates = new int[2][values/2];
for(int i = 0; i < values.length; i+=2) {
coordinates[0][i/2] = values[i];
coordinates[1][i/2] = values[i+1];
}