0

我试图在 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:编辑后的版本是否正确?

4

5 回答 5

1

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

  • 它错误地处理了数组,Java 数组中的 las 元素位于 position length-1,这将导致ArrayOutOfBoundsException
  • 即使您通过减去 1 来纠正它,您也总是只覆盖最后一个元素,因为lengthJava 数组的 与它包含多少元素无关,而是它被初始化包含多少元素。

代替:

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]; 
于 2012-10-16T10:04:13.560 回答
1

如果你知道你肯定会有偶数的values你可以做

for(int i = 0; i < values.length / 2; i++) {
  coordinates[0][i] = values[2*i];
  coordinates[1][i] = values[2*i + 1];
}
于 2012-10-16T10:05:29.060 回答
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];

}
于 2012-10-16T10:21:45.680 回答
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];
  }
}
于 2012-10-16T10:00:22.310 回答
0

java 的数组索引是从“0”到“数组长度 - 1”。

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

数组中的每一项都称为一个元素,每个元素都通过其数字索引访问。如上图所示,编号从 0 开始。例如,第 9 个元素将在索引 8 处访问。

于 2012-10-16T10:03:33.810 回答