[英]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.