2017-10-12 40 views
0

我正在嘗試通過讀取文件來填充長數字的數字數組(以及相同數字的臨時數組)。該文件是大約32000行各種長號碼(每行一個)。由我的教授提供的代碼如下所示:Java - 在不知道大小的情況下從txt文件填充長數組?

public static void main(String[] args) throws FileNotFoundException { 

    Scanner in = new Scanner(new File("longNumbers.txt")); 
    Long [] numbers; 
    Long [] temp; 
    Long startTime, endTime; 

    while(in.hasNext()) { 
     //TODO: populate numbers and temp arrays 

    } 

由於暗示在提供的while循環內完成的工作。我的問題是:這不是一個數組的大小固定?如果我們在填充數組之前沒有在每行中進行掃描,我們怎麼知道數組的大小是多少?我很困惑這兩個數組應該在檢查每一行時填充/實例化。

+0

使用ArrayList或其他您需要的變量大小列表。 – Carcigenicate

+0

你可以先構造一個'List',然後將它轉換爲一個數組。其他選擇是以某種方式使用新的流(沒有多少查看它們) – phflack

+0

@Carcigenicate:請參閱下面的註釋。我非常確定我們只打算使用數組,因爲這是我的老師提供的。否則,我會立即切換到一個ArrayList。 –

回答

2

您可以使用動態大小的陣列 ArrayList<Long>基本上是一個數組的封裝器,並在您嘗試寫出邊界時負責調整大小和複製它。順序存儲器分配的性質,並提出重新創建數組和複製元素的成本,如果粗略估計不知道,並且做了太多的調整大小。

LinkedList這裏

+0

我很確定我們只打算使用數組,因爲這是我的教師提供的。否則,我會立即切換到一個ArrayList。 –

+0

我認爲你的教授希望你想出'ArrayList'實現,或者另一種方式是迭代你的文件兩次。 –

0

你可以嘗試in.nextLong()在循環與ArrayList和創建具有'ArrayList'的大小後的數組(如果你真的需要它):

ArrayList<Long> numbers = new ArrayList<Long>(); 
while (in.hasNext()) { 
    numbers.add(in.nextLong()); 
} 
long[] numberArray = numbers.toArray(new Long[numbers.size()]); 
// put all the numbers from ArrayList to the array 
0

我認爲你的老師還談到了如何調整數組大小。 下面是一個簡短刷新:

int INIT_SIZE = 10 
int[] array = new int[INIT_SIZE]; 
i = 0 
while(condition) 
{ 
    array[i++] = nextInt(); 
    if(i == array.length)  
     array = Arrays.copyOf(array, 0, array.length + (array.length/2)); 
} 

這是一個常見的解決方案來調整陣列添加其長度的一半。

既然您已經知道如何調整一個int數組的大小,那麼調整一個Long數組的大小就很容易了。

相關問題