将元素添加到最后的数组位置

时间:2012-10-16 09:58:05

标签: java arrays processing

我试图在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会不正确?

5 个答案:

答案 0 :(得分:1)

您的原始代码有两个问题:

  • 它严重地处理了数组,Java数组中的las元素位于length-1位置,这将导致ArrayOutOfBoundsException
  • 即使你通过减去1来纠正它,你也总是会覆盖最后一个元素,因为Java数组的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];

}