简体   繁体   English

使用 concat 附加“0”似乎不起作用

[英]Appending '0' using concat does not seem to work

I have a program that compares two integer value's length with this extension method我有一个程序将两个整数值的长度与此扩展方法进行比较

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

And it works perfectly.它完美地工作。 When I print the value of num1.numDigits() , the value returns 4 (it is worth '1111'. And my other integer: num2.numDigits() returns 2 (it is 11). This is great but when I actually compare them:当我打印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 is still '11' when it should be '0011'. reversedNum2 应该是“0011”时仍然是“11”。

This is the class I compiled and used.这是我编译和使用的类。

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

Why is this happening?为什么会这样?

You are discarding the return value of the Append method.您正在丢弃Append方法的返回值。 Change改变

rawNum2.Append(0);

to

rawNum2 = rawNum2.Append(0);

inside the for loop.for循环内。

您的循环可以并且应该简化为:

rawNum2 = rawNum2.PadRight(num1.NumDigits(), '0')

To get the reversedNum2 as 0011 change your loop as below.要将 reversedNum2 设为 0011,请按如下方式更改循环。

for (int i = 1; i <= diff; i++)
{
rawNum2=rawNum2.Append(0);
}

I made two changes changed the for loop to use i<=diff instead of i < diff and assigning the return value from Append() method into the rawNum2.我做了两个更改,将 for 循环更改为使用 i<=diff 而不是 i < diff 并将 Append() 方法的返回值分配给 rawNum2。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM