【问题标题】:changing C vectors to Java将 C 向量更改为 Java
【发布时间】:2013-11-10 13:45:21
【问题描述】:

有一个 C 代码,我必须将其更改为 Java。在这段代码中有很多向量,比如 Vector2 和 Vector3。 我知道我可以用 Java 语言为它们定义数组或列表但是我想问一下 Java 中是否有任何预定义的结构或类与 vector2 或 vector3 一样工作?

例如,Java 中的 Point 就像一个带有 2 个双变量的 vector2,但您不能在 Point 中存储任何其他数据类型。

【问题讨论】:

  • vector2和vector3的签名是什么?
  • 这些是使用双元素的vector2和vector3的一些样本: Vector2 v_north = { 1.0, 0.0 }; Vector3 v_target_tmp = {v_north.u, v_north.v, 1.0};

标签: java c vector


【解决方案1】:

如果这是关于向量数学的,您可能想要使用向量数学库,例如

否则,您可能需要使用 java.util.ArrayList,它是 c++ stl 向量最接近的匹配项。不要使用 java Vector 类,它只是为了与旧代码兼容而维护。

对于固定大小的向量,您可能只想使用 Java 数组(如不同答案中所建议的那样)。

【讨论】:

  • 谢谢,我不知道向量数学库有所有这些类。
【解决方案2】:

Object[2] 是一个包含 2 个元素的数组,用于存储任何对象引用。或者 java.util 中有几个不同的 List 类(不知道为什么需要这么多),它们将存储任何对象并且是可变长度的。例如,要将double 存储为一个对象,以便它可以与数组中的其他对象共存,请使用new Double(doubleValue)

【讨论】:

  • 或者,如果 OP 确切知道应该在数组中存储哪种对象,SpecificClass[2]
  • 始终使用 Double.valueOf(doubleValue) -- new Double(doubleValue) 将分配新对象,即使是频繁的值,例如 0、1、-1...
【解决方案3】:

看看java.util.ArrayList。它可以很好地用作可变长度容器。有一个 java.util.Vector 类,但最好不要将它用于a variety of reasons

如果您需要对向量执行几何运算(加法、乘法、投影等),那么您需要查看其他选项(请参阅here 开始)。

【讨论】:

  • 1. Java 中的 Vector 类类似于 List,这不是 OP 正在寻找的。 2. ArrayList 比 Vector 好得多(但仍然不是 OP 想要的)。
  • 你怎么知道 OP 在找什么?
  • 其实我自己也开始怀疑了,因为我看到“但是你不能在 Point 中存储任何其他数据类型”。老实说,我不确定他想要什么了。因此,我删除了我的反对票,但不幸的是我也不能真正赞成。
  • 如 Stefan Haustein 的回答中所述,java.util.Vector 仍然不是一个好主意。
  • 是的,感谢您指出这一点。在你提到之前我不知道。
猜你喜欢
  • 2021-11-30
  • 1970-01-01
  • 2019-08-04
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多