2017-10-12 12 views
0

J'essaie de remplir un tableau de nombres de nombres longs (ainsi qu'un tableau temporaire des mêmes nombres) en lisant dans un fichier. Le fichier contient environ 32 000 lignes de différents nombres longs (un par ligne). Le code fourni par mon professeur ressemble à ceci:Java - Remplir un long tableau depuis un fichier txt sans connaître la taille?

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 

    } 

Avec le travail implicite à faire dans la boucle while fourni. Ma question est la suivante: la taille d'un tableau n'est-elle pas corrigée? Et si nous n'avons pas analysé chaque ligne avant de remplir le tableau, comment pouvons-nous savoir quelle sera la taille des tableaux? Je suis très confus quant à la façon dont ces deux tableaux devraient être peuplés/instancié tout en vérifiant chaque ligne.

+0

Utiliser un ArrayList ou autre Vous avez besoin d'une taille variable. – Carcigenicate

+0

Vous pouvez construire une 'List' d'abord, puis le convertir en un tableau après. D'autres options consisteraient à utiliser les nouveaux flux d'une façon ou d'une autre (ne les ayant pas regardés autant) – phflack

+0

@Carcigenicate: Voir mon commentaire ci-dessous. Je suis sûr que nous sommes censés utiliser uniquement des tableaux, car c'est ce qui a été fourni par mon instructeur. Sinon, j'aurais immédiatement basculé vers une ArrayList. –

Répondre

2

Vous pouvez utiliser un tableau de taille dynamique ArrayList<Long> Fondamentalement, un wrapper sur un tableau et prend soin de le redimensionner et de le copier lorsque vous essayez d'écrire hors des limites. L'allocation de mémoire séquentielle dans la nature et revient au coût de recréer des éléments de tableau et de copie si l'estimation approximative n'est pas connue et trop de redimensionnement est fait.

ou LinkedList ici

+0

Je suis sûr que nous sommes censés utiliser uniquement des tableaux, car c'est ce qui a été fourni par mon instructeur. Sinon, j'aurais immédiatement basculé vers une ArrayList. –

+0

Je pense que votre professeur veut que vous mettiez en place une implémentation 'ArrayList' ou que vous utilisiez deux fois le fichier. –

0

Vous pouvez essayer in.nextLong() dans votre boucle avec un ArrayList et créer un tableau avec la taille de la'ArrayList' après (si vous avez vraiment besoin):

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

I pense que votre instructeur a également parlé de la façon de redimensionner un tableau. Voici une courte rafraichissement

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)); 
} 

Il est une solution commune pour redimensionner un tableau en ajoutant la moitié de sa longueur. Maintenant que vous savez comment redimensionner un tableau de int, il sera facile de redimensionner un tableau de Long.