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

Résolu/Fermé
vilili6228 Messages postés 9 Date d'inscription mercredi 22 décembre 2021 Statut Membre Dernière intervention 19 mai 2022 - 19 mai 2022 à 17:08
vilili6228 Messages postés 9 Date d'inscription mercredi 22 décembre 2021 Statut Membre Dernière intervention 19 mai 2022 - 19 mai 2022 à 18:19
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
19 mai 2022 à 18:04
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 mercredi 22 décembre 2021 Statut Membre Dernière intervention 19 mai 2022
19 mai 2022 à 18:19
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