2016-02-26 1 views
-4

Dans mon code, je reçois beaucoup de nombres qui sont séparés par un espace. Ainsi, par exemple, je reçois 318 numéros et je dois les mettre dans un tableau. donc je l'ai fait:erreur de compilation lors de la conversion de la chaîne de nombres

int[] alleNummers = Array.ConvertAll(Console.ReadLine().Split(new[] { ' ' }), int.Parse); 

mais quand je remplissais cette longueur des nombres:

4 1 3 3 4 6 10 1 1 8 7 1 8 6 11 9 2 6 9 1 8 2 12 9 12 1 3 1 6 8 6 10 9 9 1 1 2 11 2 2 6 8 3 1 1 2 10 3 7 6 3 3 7 2 11 7 2 2 7 8 10 1 6 6 9 7 7 11 5 8 1 10 3 3 11 4 4 8 6 11 2 8 1 9 10 12 3 12 1 10 8 11 11 1 4 8 7 10 6 11 6 7 9 8 10 8 11 1 4 5 12 5 1 1 1 10 12 4 10 1 2 5 11 12 6 3 7 1 1 1 12 6 7 9 2 4 4 12 5 7 5 5 12 5 5 12 3 5 4 12 5 5 5 4 4 10 7 11 10 7 12 10 1 7 6 2 11 10 2 4 4 6 8 4 11 1 3 1 5 7 1 9 11 5 1 3 3 7 2 1 1 1 10 1 8 3 3 6 12 4 10 4 9 5 7 8 6 10 8 10 4 9 7 3 1 7 6 4 1 7 4 2 8 1 3 3 4 5 9 4 9 6 8 6 11 2 1 4 12 9 1 4 5 8 7 6 2 12 9 3 6 12 5 1 1 8 4 4 1 12 8 9 6 3 2 5 5 3 8 4 11 9 8 3 4 2 8 6 2 5 9 7 4 1 8 5 9 12 8 9 12 3 6 5 6 8 9 10 10 5 2 8 1 9 10 5 11 6 10 12 10 6 7 2 7 2 6 3. 

Je reçois system.formatexception: Input string was not in a correct format. Je regardais autour de l'Internet et je voyais que je devais changer mon code pour ceci:

int[] alleNummers = Array.ConvertAll(Console.ReadLine().Split(new[] { ' ' },StringSplitOptions.RemoveEmptyEntries), int.Parse); 

Mais maintenant je ne reçois pas tous les nombres et je n'ai aucune idée pourquoi cela se produit. Quand j'ai rempli les nombres ci-dessus, alleNummers.Count donnez-moi 115 et non 318.

Je voudrais savoir pourquoi cela se passe et ce que je devrais faire pour obtenir ces nombres dans un tableau ou dans n'importe quel collections.generic class.

+0

Vous avez peut-être deux espaces en série. Le mieux est de pouvoir d'abord supprimer l'espace de la chaîne puis de passer à un tableau. – Olivarsham

+0

Plutôt que de tester cela en tapant dans la console, testez-le en assignant les données de test à une chaîne et utilisez-les à la place de 'Console. ReadLine() '. Si vous pouvez reproduire le problème de cette façon, publiez le programme entier ici. –

+0

Pour moi, le premier code compile et fonctionne très bien et recule 318 éléments. Êtes-vous sûr que votre entrée ressemble à ceci? Vous pouvez avoir une erreur sur l'un de ces numéros, par ex. quelque chose comme '3.5'. – HimBromBeere

Répondre

2

Comme dustmouse déjà souligné la longueur maximum de caractères que vous pouvez entrer dans la console est 256. Donc ce que vous effectivement entrez est la suivante:

4 1 3 3 4 6 10 1 1 8 7 1 8 6 11 9 2 6 9 1 8 2 12 9 12 1 3 1 6 8 6 10 9 9 1 1 2 11 2 2 6 8 3 1 1 2 10 3 7 6 3 3 7 2 11 7 2 2 7 8 10 1 6 6 9 7 7 11 5 8 1 10 3 3 11 4 4 8 6 11 2 8 1 9 10 12 3 12 1 10 8 11 11 1 4 8 7 10 6 11 6 7 9 8 10 8 11 1 4 5 12 5 1 1 1 

qui sont les 256 premiers caractères de votre entrée chaîne (notez l'espace de fin). Comme le dernier caractère est un espace, vous obtiendrez le FormatException que vous avez mentionné car String.Split renverra 115 éléments de tableau dont un vide à la fin qui ne peut pas être converti en int. C'est aussi pourquoi String.Split avec StringSplitOptions.RemoveEmptyEntries fonctionne car il omet simplement l'élément vide du tableau à convertir en int.

Tant que vous entrez tous ces nombres en utilisant la console, vous êtes bloqué sur cette limitation de caractères. Cependant, vous pouvez lire cette entrée à partir d'un fichier ou de tout autre type de flux: