2016-12-16 13 views
0

Я новичок в программировании и пока только практикую с C#. Поэтому моя проблема: я пытаюсь отделить число в цифрах с массивом (пример: номер 12345 в цифрах {1,2,3,4,5}). Я делаю код, вот это:разделительный номер в массиве цифр C#

int num = int.Parse(Console.ReadLine()); 
     int[] digits = new int[3]; 
     int separatedDigit = 0; 


     for (int i = num; num != 0; i--) 
     { 
      digits[i] = num % 10; 
      num = num/10; 

     } 

но он показывает мне ошибку «Индекс находился вне границ массива.» Я предполагаю, что проблема исходит от этой части «для», потому что она начинается с позиции 3, а массив имеет только 2 (0, 1, 2). Я не знаю, как это исправить, так может кто-нибудь мне помочь?

+0

Позиция № 3, на самом деле ссылаются как [2], так как вы начинаете в положении [0] – gravity

+0

, когда ваш для начала цикла, вы пытаетесь сделать, как 'цифр [12345] = 5', которое .net runtime не разрешает, поскольку индекс «12345» не существует в массиве. – Agalo

+0

+12345 просто пример в моей ситуации это число утоляет длиной 3 цифры ... –

ответ

0

i начинается равным num, что, в свою очередь, начинается, как номер, который вы ввели , который может быть намного больше 3. Например, если я вхожу в 123 в качестве входного номера, тогда цикл сначала пытается получить доступ к digits[123], который равен waaaaaay за пределами этого массива.

Вы будете хотеть, чтобы настроить ваш цикл, чтобы получить i начать на более разумное количество:

for (int i = digits.Length - 1; num != 0; i--) 
{ 
    // ... 

В качестве альтернативы, вы можете начать i 0 и работать ваш путь вверх:

for (int i = 0; num != 0; i++) 
{ 
    // ... 
+0

Это работает, спасибо большое. :) –

1

Попробуйте Linq: отфильтровывать '0' .. '9' символов и материализовать их в массив:

int[] digits = Console 
    .ReadLine() 
    .Where(c => c >= '0' && c <= '9') // '0'..'9' characters only 
    .Select(c => c - '0')    // '0' should correspond to 0 integer 
    .ToArray(); 
+0

Хотя это делает эту работу, я чувствую, что она не касается основного вопроса ОП. Имейте в виду, что ОП является новичком и хочет знать не только «что», но и «почему». – Abion47

+0

извините, но он прав –

0

Попробуйте этот код:

string numberSequence = Console.ReadLine(); 
    var numberCount = numberSequence.Length; 
    int[] digitArray = new int[numberCount]; 
    int i = 0; 
    foreach (var number in numberSequence) 
    { 
     digitArray[i] = number; 
     Console.WriteLine(number); 
     i++; 
    } 
    Console.ReadLine(); 
0

Тест

 int _num = 12345; 
     var g = _num.ToString().Select(x => int.Parse(x.ToString())).ToArray<int>(); 
0

Попробуйте

string strValue = "19345abc#/"; 
char[] charArray = strValue.ToCharArray(); 
List<int> list = new List<int>(); 
for (int i = 0; i < charArray.Length; i++) 
    { 
     if (char.IsNumber(charArray[i])) 
     { 
      list.Add(charArray[i] - '0'); 
     } 
    }