Comment on crée un tableau à deux dimensions infini ?

Résolu
vilili6228 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
vilili6228 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

J'essaye de créer un tableau à deux dimensions en Java qui contient des chiffres, voici ce que j'ai fait :


public static Integer[][] lectureDistances(File fichier) throws IOException {
Integer distances[][] = {};
BufferedReader bufferEntree = new BufferedReader(new FileReader(fichier));
String ligne ;
StringTokenizer tokenizer ;
do {
ligne = bufferEntree.readLine ();
int i = 0;
int j = 0;
if (ligne != null) {
System.out.println(ligne.length());
tokenizer = new StringTokenizer(ligne, " ");
while (tokenizer.hasMoreElements()) {
distances[i][j] = Integer.parseInt(tokenizer.nextToken());
j += 1;
}
i += 1;
}

}
while (ligne != null );
bufferEntree.close();
return distances;
}


Le problème est qu'il me retourne des erreurs que voici :


Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at com.example.appli/com.example.appli.Test_Scenario.lectureDistances(Test_Scenario.java:79)
at com.example.appli/com.example.appli.Test_Scenario.main(Test_Scenario.java:103)


J'ai pensé que c'était dû au fait qu'il fallait imposer une longueur au tableau mais je ne suis pas sûr. Je n'ai pas trouvé de réponse en faisant quelques recherches. Je m'en remet à vous.



Configuration: Windows / Chrome 101.0.4951.67
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Integer distances[][] = {}; 
que l'on écrit normalement
Integer[][] distances = {};
est un tableau de tableaux qui ne contient rien, donc en vrai c'est un tableau à 0 dimension...

Pour initialiser un tableau il faudrait lui donner une taille, par exemple :
Integer[][] distances = new Integer[10][20];


Mais le problème c'est qu'il faudrait savoir à l'avance quelle taille lui donner, dans ton cas il faudrait connaître le nombre de lignes du fichier ou a minima le nombre maximal de lignes que peut prendre le fichier.
En théorie, on peut faire un fichier.length qui renvoie la taille du fichier en octets, en supposant que ton fichier ne contienne que des saut de lignes, ça veut dire que le nombre de lignes (vides, certes) est au maximum égal à la taille du fichier.
Même principe pour déterminer la deuxième dimension du tableau, avec ligne.length() tu connais le nombre de caractères de la ligne, c'est le nombre maximum de nombre que tu peux avoir dans une ligne.

Remarque : en pratique, on n'utilise généralement pas les tableaux pour faire ce genre de traitements mais plutôt des List qui vont se redimensionner automatiquement au fur et à mesure que l'on ajoute des données dedans.
1
vilili6228 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour KX et merci pour ta réponse. Bon j'ai juste mis des valeurs larges entre les crochets tant pis si ça déborde. En tout cas ça marche !
0