Je travaillais sur mon affectation et j'essaie de lire des données de mon fichier texte. Tandis que j'essayais de stocker ces informations à différents array un par un, une erreur comme celle-ci se produisait
mais avec la sortie de la console, elle montre qu'il a réellement exécuté à travers la première itération, mais elle se produit cette erreur et l'arrêtez-le p>
Ceci est mon code ci-dessous p> Ceci est ma sortie d'erreur dans ma console .... (remarques: 1L5 Jean code> Ceci ci-dessous provient de
system.out.println (cucibleid [i] + "" + nom [i]); code>) p>
4 Réponses :
Ajoutez un chèque avant d'accéder à l'index de tableau
String[] splitted = readLine.split("\t"); for(int i=0,j=0; i< splitted.length;i++) { if(splitted.length > j) cucibleID[i] = splitted[j++]; if(splitted.length > j) name[i] = splitted[j++]; if(splitted.length > j) matricNo[i] = splitted[j++]; if(splitted.length > j) date[i] = splitted[j++]; if(splitted.length > j) spvName[i] = splitted[j++]; if(cucibleID.length >i && name.length >i) System.out.println(cucibleID[i] +" "+ name[i]); }
Impossible d'utiliser Épôle code> dans
pour code> en-tête de boucle si elle est déclarée à l'intérieur i> la boucle. En outre, quel est le point de fractionnement du même
readline code> plusieurs fois?
J'ai essayé mais toujours mon pote de sortie .. mais merci de l'aide
Becaus La ligne dans le fichier texte est suivie d'ID, nom, matricno, date, SPVName avec un \ T comme Delimètre, c'est pourquoi je les divisions et enregistre dans le tableau individuellement. Ou y a-t-il un meilleur moyen?
Je suis sûr que cela supprime l'exception, mais cela n'entraîne pas le comportement NG Jing Xuan s'attend à. Cela semble une sorte de CSV (onglets) prenant le lieu de la commata dans ce cas.
Eh bien, le code source ne peut pas corriger si des problèmes avec des données d'entrée, il ne peut que gérer les problèmes gracieusement.
Que croyez-vous que l'entrée est? La question ne dit pas spécifiquement, bu la seule chose qui a du sens pour moi, ignorant la mauvaise logique du code de la question, est que le fichier est un fichier texte séparé par onglet, avec 5 valeurs par ligne. C'est pourquoi il y a une lecture de boucle lignes i>, et il y a 5 tableaux de 100 (?) Valeurs pour lire jusqu'à 100 lignes du fichier. L'index dans les 5 tableaux doit être un numéro de ligne, de sorte d'indexer avec i code>, qui itérale les valeurs d'une ligne, n'a aucun sens. Pourquoi chaque ligne commencerait-elle à affecter à
[0] code> à chaque fois? La boucle
pour code> est mauvaise, et cette réponse est donc.
Il y a une raison de croire en ce que, car l'indice de valeur de la valeur liée est de 5 en bûches d'exception, de sorte que s'il a traversé la limite de 100 lignes, il devrait avoir un index plus important.
Votre code devrait être quelque chose comme ceci: modifié scanner code> à
bufferedreader code> car
scanner code> est très lent. p> p>
Permettez-moi d'expliquer, de quoi votre faute pour chaque boucle. En supposant que la longueur de votre réseau SClitett est 5.
première itération: p>
i = 0; j = 0; code> li>
- ligne avec cucibleid ->
i = 0; j = 0; code> et j ++ code> que
signifie que J sera j = 1; code> li>
- ligne avec nom ->
i = 0; j = 1; code> et j ++ code>
Cela signifie que J sera j = 2; code> li>
- ligne avec matricno ->
i = 0; j = 2; code>
et j ++ code> qui signifie J sera j = 3; code> li>
- ligne avec date ->
i = 0; j =
3; code> et j ++ code> qui signifie que j sera j = 4; code> li>
- ligne avec SPVName ->
i
= 0; j = 4; code> et j ++ code> qui signifie J sera j = 5; code> li>
- fin de première itération.
i = 0 code> -> i <7 code> -> i ++ code> li>
ul> secondé itération p>
-
i = 1; j = 5; code> li>
- ligne avec cucibleid ->
i = 0; j = 5; code> et le arrayindexoutofbound arrivera li>
ul> Comme vous pouvez le voir de mon exemple est le suivant:
Vous avez l'index correct i code> pour votre tableau écarté, mais vous utilisez j code> comme index.
Le code suivant définira vos tableaux correctement à l'index 0, en supposant que votre matrice écartée a 5 éléments p> xxx pré> p>
Vous n'avez pas besoin de la boucle. Utilisez Vous deviez probablement ajouter une certaine logique supplémentaire pour traiter l'enregistrement avec moins de 5 éléments p> j code> pour les éléments de l'enregistrement divisé.
j code> devrait commencer à 0 pour chaque enregistrement.
Utilisez
i code> pour l'enregistrement traité.
Je viens de prendre la liberté d'ajouter une déclaration de variable de déclaration pour j code> et de résoudre celui-ci pour
i code>. Vous pouvez faire rouler la modification, si vous ne voulez pas retourner à votre version ...
Quel est le point du
pour code> boucle? Pourquoi essayez-vous d'extraire 5 valeurs x fois? Re-pensez ce que vous faites, par exemple. La variable
i code> doit incrémenter une fois pour chaque itération de l'extérieur
pendant la boucle code>, et il ne devrait y avoir aucune boucle interne, car vous savez (bien, attendre) chaque ligne d'avoir 5 Valeurs, vous venez de les obtenir directement, comme dans
cucibleid [i] = écarté [0]; code>, car le
cucibleid code> est la première valeur de la ligne.
Très semblable à votre dernière question, celle-ci ne contient pas assez d'informations pour identifier le problème. Je peux faire une supposition éduquée, mais cela reste juste que: une supposition. Vous feriez mieux d'inclure le contenu du fichier jusqu'à la ligne après celui contenant le contenu
john code>. (Mon devinement étant que ne pas réinitialiser
j code> à 0 au début de chaque itération de la boucle vous permet d'essayer de faire référence à des parties de la scission qui n'existent pas (la 2e itération fait référence à la cinquième partie la première fois la première fois. Il y a un accès lu à la matrice).)
Oh yaa je pense avoir des problèmes logiques sérieux. Merci andreas
Merci fabian je pense que j'obtiens ce que tu veux dire
En fait, l'indice 5 est la 6ème partie ... a un peu d'inattention là-bas ...
Si vous avez un
TSV (tabulation de valeur séparée) code> fichier, utilisez une API pour le traiter. Univocity.com/pages/about-parsers