首页 > 解决方案 > 使用 concat 附加 '0' 似乎不起作用

问题描述

我有一个程序将两个整数值的长度与此扩展方法进行比较

public static int NumDigits(this int n)
{
    if (n < 0)
    {
        n = (n == int.MinValue) ? int.MaxValue : -n;
    }
    if (n < 10) return 1;
    if (n < 100) return 2;
    if (n < 1000) return 3;
    if (n < 10000) return 4;
    if (n < 100000) return 5;
    if (n < 1000000) return 6;
    if (n < 10000000) return 7;
    if (n < 100000000) return 8;
    return n < 1000000000 ? 9 : 10;
}

而且效果很好。当我打印 的值时num1.numDigits(),该值返回 4(它值 '1111'。而我的另一个整数:num2.numDigits()返回 2(它是 11)。这很好,但是当我实际比较它们时:

int[] rawNum2 = Arrays.DigitArr(num2);

if (num1.NumDigits() > num2.NumDigits())
{
    int diff = num1.NumDigits() - num2.NumDigits();
    for (int i = 1; i < diff; i++)
    {
        rawNum2.Append(0);
    }

    reversedNum2 = rawNum2.Reverse();

}

reversedNum2 应该是 '0011' 时仍然是 '11'。

这是我编译和使用的类。

public static int[] Append(this int[] source, int value)
{
    int[] newValue = source;
    newValue = newValue.Concat(new[] { value }).ToArray();
    return newValue;
}

public static int[] Reverse(this int[] array)
{
    int[] arr = array;
    for (int i = 0; i < arr.Length / 2; i++)
    {
      int tmp = arr[i];
      arr[i] = arr[arr.Length - i - 1];
      arr[arr.Length - i - 1] = tmp;
    }

    return arr;
}

public static int[] DigitArr(int n)
{
    if (n == 0) return new int[1] { 0 };

    var digits = new List<int>();
    for (; n != 0; n /= 10)
        digits.Add(n % 10);

    var arr = digits.ToArray();
    Array.Reverse(arr);
    return arr;
}

为什么会这样?

标签: c#arrays

解决方案


您正在丢弃该Append方法的返回值。改变

rawNum2.Append(0);

rawNum2 = rawNum2.Append(0);

for循环内。


推荐阅读