繁体   English   中英

填写Java中未初始化的数组? (或解决方法!)

[英]Filling in uninitialized array in java? (or workaround!)

我目前正在为opengles android游戏创建OBJ导入程序。 我对Java语言比较陌生,因此在某些方面我不太清楚。

我有一个数组,它将保存模型中的顶点数(以及其他一些数组):

float vertices[];

问题是在使用给定的输入流读取文件之前,我不知道模型中有多少个顶点。

我可以按需要填写吗?:

vertices[95] = 5.004f; //vertices was defined like the example above

还是我必须事先对其进行初始化?

如果是后者,那么找出文件中顶点数量的好方法是什么? 一旦我使用inputstreamreader.read()读取了它,它将转到下一行,直到读取整个文件为止。 我唯一能想到的就是读取整个文件,计算顶点数量,然后重新读取新初始化的数组中的填充内容。

有没有一种方法可以根据需要动态分配数据?

您可以使用ArrayList,它会为您提供所需的动态大小。

   List<Float> vertices = new ArrayList<Float>();

您可以添加如下值:

   vertices.add(5.0F);

列表会不断增加以满足您的需求。

注意事项:ArrayList将保存对象,而不是原始类型。 因此,它将您提供的浮点值存储为Float对象。 但是,很容易从中获取原始浮点值。

如果您绝对需要一个数组,那么在读取整个值列表之后,您可以轻松地从列表中获取一个数组。

您可以从这里开始阅读有关Java集合的信息

在Java中,必须事先初始化数组。 您可以选择以下选项:

1)使用其他人建议的ArrayList (或List接口的其他实现)。 这样的列表可以动态增长,因此将有所帮助。

2)如果您可以控制文件格式,请在文件的开头添加有关顶点数量的信息,以便您可以使用正确的大小预先初始化数组。

3)如果您没有控制权,请尝试根据文件大小猜测顶点的数量(浮点数为4个字节,因此例如可以将File.length()除以4)。 如果猜测的数字太小,则可以动态创建一个更大的数组(例如,前一个数组大小的120%),然后将所有数据从前一个数组复制到新数组中并继续。 这可能会很昂贵,但是如果您对数组大小的猜测是准确的,那将不是问题。

如果您向我们提供有关文件格式和/或将如何使用此顶点数组的更多信息(例如:存储很长时间或迅速丢弃),我们可能会给您更多的想法。

不,您不能填写未初始化的数组。 如果您需要一个允许存储数据和索引的动态结构(在您的情况下这似乎很重要),那么我会选择Map(Map的键将是您的索引):

Map<Integer, Float> vertices = new HashMap<Integer, Float>();
vertices.put(95, 5.004f);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM