【问题标题】:separating number in array of digits C#分隔数字数组中的数字C#
【发布时间】:2016-12-16 20:26:27
【问题描述】:

我是编程新手,目前只练习 C#。所以我的问题是:我试图用数组分隔数字中的数字(例如:数字 12345 到数字 {1,2,3,4,5})。我做了一些代码,这里是:

  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)。我不知道如何解决它,所以有人可以帮助我吗?

【问题讨论】:

  • 位置 #3,实际上被引用为 [2],因为您从位置 [0] 开始
  • 当你的 for 循环开始时,你正试图像digits[12345] = 5 那样做,.net 运行时不允许这样做,因为数组中不存在索引 '12345'。
  • 12345 只是在我的情况下的例子,这个数字是 3 位数长...
  • 如何使它从位置 0 开始,因为我尝试了 (int i = 0; num != 0; i++) { digits[i] = num % 10;数 = 数 / 10; } 但还是不行

标签: c# arrays digits


【解决方案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();

【讨论】:

  • 虽然这可以完成工作,但我觉得它并没有解决 OP 的核心问题。请记住,OP 是初学者,不仅想知道“什么”,还想知道“为什么”。
【解决方案2】:

i 的开头等于num,而num 的开头又是您输入的数字,它可以远大于3。例如,如果我输入123 作为输入数字,然后循环首先尝试访问位于该数组边界之外的 waaaaaaydigits[123]

您将需要调整您的 for 循环以使 i 以更合理的数字开始:

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

或者,您可以从 0 开始 i 并逐步向上:

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

【讨论】:

    【解决方案3】:

    试试这个

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

    【讨论】:

      【解决方案4】:

      试试这个

       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');
               }
           }
      

      【讨论】:

        【解决方案5】:

        问题是你在初始化数组时没有分配正确数量的空格,例如在下面的代码行中: int[] digits = new int[3];.. 相反,您应该首先读取输入,计算输入的数字(字符)的数量,然后分配具有该数量元素的数组。请记住,数组从索引 0 .. 所以在你的例子中,第一个字符(数字)将输入到 numbers[0].. 然后 numbers[1]... digit[2].. etc.. 从循环内输入,直到所有数字已输入。

        试试这个代码:

            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();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多