2016-12-16 41 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; 

     } 

,但它显示了我的错误“索引超出了数组的范围之外。”我想这个问题来自于“for”部分,因为它从位置3开始,数组只有2(0,1,2)。我不知道如何解决它,所以有人可以帮助我吗?

+0

3#位置,作为实际引用[2],因为你开始在位置[0] – gravity

+0

当你的for循环开始,你正在尝试做的,比如'位数[12345] = 5',运行时不允许作为索引'12345'在数组中不存在。 – Agalo

+0

12345是我的情况只是例子数为allays 3个位数... –

回答

0

i开始为等于num,这反过来又开始为您所输入的号码,可以远远大于3.例如,如果我把123作为输入号码,那么循环首先尝试访问digits[123],即waaaaaay超出该数组的界限。

你会想调整你的循环得到i在一个比较合理的数字开始:

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

或者,你可以从0开始i和您的方式工作:

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

虽然这样做的工作,我觉得它不解决OP的核心问题。请记住,OP是一个初学者,不仅要知道“什么”,还要知道“为什么”。 – 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'); 
     } 
    } 
相关问题