2016-02-26 2 views
-4

В моем коде я получаю много чисел, разделенных пробелом. Так, например, я получаю 318 номеров, и мне нужно поместить их в массив. Так что я сделал это:ошибка компиляции при преобразовании строки чисел

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

но когда я заполнил эту длину чисел:

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. 

Я получаю system.formatexception: Input string was not in a correct format. Я посмотрел вокруг интернета, и я увидел, что мне нужно, чтобы изменить свой код это:

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

Но теперь я не получаю все цифры, и я понятия не имею, почему это происходит. Когда я заполнил вышеуказанные цифры, alleNummers.Count дайте мне 115, а не 318.

Я хотел бы знать, почему это происходит, и что я должен сделать, чтобы получить эти числа в массиве или в любом collections.generic class.

+0

Возможно, у вас есть два пространства подряд. Лучше всего вы можете сначала удалить пространство из строки, а затем перейти к массиву. – Olivarsham

+0

Вместо того, чтобы тестировать это, введя его в консоль, проверьте его, назначив тестовые данные строке и используйте вместо «Консоль». ReadLine() '. Если вы можете воспроизвести проблему таким образом, разместите здесь всю программу. –

+0

Для меня первый код компилируется и работает просто отлично и возвращает 318 элементов. Вы уверены, что ваш ввод выглядит так? У вас может быть ошибка на любом из этих чисел, например. что-то вроде '3.5'. – HimBromBeere

ответ

2

Как dustmouse уже указывалось, что максимальная длина символов, которые вы можете ввести в консоли 256. Так что вы на самом деле введите следующий:

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 

, которые являются первые 256 символов из вашего входа string (обратите внимание на конечное пространство). Поскольку последний символ - это пробел, вы получите упомянутый вами FormatException, потому что String.Split вернет 115 элементов массива, включая пустые в конце, которые не могут быть преобразованы в int. Вот почему String.Split с StringSplitOptions.RemoveEmptyEntries работает, потому что он просто пропускает пустой элемент из массива, который нужно преобразовать в int.

До тех пор, пока вы вводите все эти цифры с помощью консоли, вы застряли на этом ограничении символов. Однако вы можете прочитать этот ввод из файла или любого другого потока:

string text = File.ReadAllText(fileName)); 
int[] alleNummers = Array.ConvertAll(text.Split(new[] { ' ' }), int.Parse); 
Смежные вопросы