c#检查charAt是否为空

时间:2016-11-19 12:11:29

标签: c#

在我的程序中,用户必须输入5个数字(不同的位数)。

int[] num = new int[5];
        for(int x = 0; x < 5; x++)
        {
            Console.Write("Enter number" + (x + 1) + ": ");
            num[x] = Convert.ToInt32(Console.ReadLine());
        }

获取最大长度:

int maxLength = 0;
for (int x = 0; x < 10; x++)
        {
            string c = num[x].ToString();
            int l = c.Length;
            if (l > maxLength)
                maxLength = l;
        }

现在,我想检查其他数字是否具有相同的数字长度。如果没有,我将添加0(或0,取决于长度)作为该数字的最后一位数。 如何检查该数字的charAt(或c#num [x])是空还是空?

我试过了:

if(c[maxLength] == ' ')

但是我收到了System.IndexOutOfRangeException错误

7 个答案:

答案 0 :(得分:0)

以秒为单位更改x <5秒

for (int x = 0; x < 5; x++)

答案 1 :(得分:0)

num[x]永远不会是null。它可能是int,或者您的程序会因输入转换错误而崩溃。

num[x] = Convert.ToInt32(Console.ReadLine());

具体来说,根据documentation

  

返回值类型:System.Int32一个32位有符号整数   相当于值中的数字,如果value为null,则为0(零)。

关于被排除的例外情况:

  • 格式异常(值不包含可选符号后跟一系列数字(0到9)。)
  • OverflowException (值表示小于Int32.MinValue或大于Int32.MaxValue的数字。)

注意:此外,您应该更改第二个循环的上限。正如我们从第一个循环中看到的那样,num.length将是5,而你的第二个循环的上限(不包括)是10!您可以使用num.legnth替换10,如果您稍后更改5,则不必再次更改第二个循环的上限。

答案 2 :(得分:0)

您可以通过将数字除以基数来计算数字的位数,直到您得到零。

int number = 250;
int basenumber = 10;
int digitcount = 0;

for (int temp = number; temp > 0; temp /= basenumber)
    digitcount++;
在这种情况下,digitcount将是3。

答案 3 :(得分:0)

你的代码中第一件事是你创建了长度为5的int数组并试图在循环中获得10个元素的值 -

<!-- language: c# -->
int[] num = new int[5];
for (int x = 0; x < 10; x++) 

这就是你得到这个例外的原因。

现在来到第二个问题 - 如果值将为null 所以在这种情况下,如果没有分配值,你将得到零。

答案 4 :(得分:0)

您可以使用:

foreach (int number in num)
{
    Console.WriteLine(number * Math.Pow(10, maxLenght - (number != 1 ? Math.Ceiling(Math.Log10(number)) : 1)));
}

答案 5 :(得分:0)

以下是一个如何将一组数字填充到最长数字长度的示例:

@Inputs()

答案 6 :(得分:0)

我喜欢以下

    static void Main(string[] args)
    {
        int maxDigits;
        string[] codes = EnterNumber(5, out maxDigits); '<--| '5' is the number of numbers you want the user to input
        codes = UnifyDigits(codes, maxDigits);
    }

    static string[] EnterNumber(int entriesNumber, out int maxDigits)
    {
        string[] entries = new string[entriesNumber];
        int number;
        int maxL=0;
        for (int i = 0; i < entriesNumber; i++)
        {
            do
            {
                Console.WriteLine("enter a number");
            } while (!Int32.TryParse(Console.ReadLine(), out number) );
            entries[i] = number.ToString();
            maxL = Math.Max(entries[i].Length, maxL);
        }
        maxDigits =maxL;
        return entries;
    }


    static string[] UnifyDigits(string[]entries, int maxDigits)
    {
        string[] unifiedEntries = entries;
        for (int i = 0; i < entries.Length; i++)
        {
            if (entries[i].Length<maxDigits)
                entries[i] = entries[i] + new String('0', maxDigits - entries[i].Length);
        }
        return unifiedEntries;
    }