簡體   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