[英]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()讀取了它,它將轉到下一行,直到讀取整個文件為止。 我唯一能想到的就是讀取整個文件,計算頂點數量,然后重新讀取新初始化的數組中的填充內容。
有沒有一種方法可以根據需要動態分配數據?
在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.