java - 将元素添加到数组的最后一个位置

标签 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:编辑后的版本正确吗?

最佳答案

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

  • 它对数组的寻址很糟糕,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/

相关文章:

java - 更改绘画面板中的绘画图像

java - 使用第 1、2 或 3 步计算到达第 4 个楼梯的方式

Java:如何为此编写通用函数?

opencv - 网络摄像头在 face_tracking 项目中看不到任何人脸

javascript - 可拖动背景

java - Maven:部署了 javax.servlet 规范

c - GTK+/C : Passing data through g_signal_connect changes the data

c++ - 将 int 转换为字符串数组

c# - 如何在 UTF-8 字节数组中找到字符串的起始索引? (C#)

java - 使用 joda time 确定 if 语句持续多长时间(处理)