打印数组时如何不显示“0”?

时间:2017-11-09 12:28:51

标签: c#

所以这是我目前的代码:

string userInput;
        int userInputInt;
        int count = 0;
        int arrayLength;
        Console.WriteLine("Enter an Integer or a non integer value");

int[] userInputs;
        userInputs = new int[10];
        arrayLength = userInputs.Length;

        while (count < 10)
        {
            Console.Write("Please Enter the Next Number ");
            userInput = Console.ReadLine();
            if (int.TryParse(userInput, out userInputInt))
            {
                userInputs[count] = userInputInt;
                count = count + 1;
            }
            else
            {
                break;
            }
        }
        Array.Reverse(userInputs);
        foreach (var item in userInputs)
        {
            Console.Write(item.ToString() + " ");

当我打印我的数组时,它会显示用户输入的数字,但是当条件被破坏且数组的其余部分未被填充时,每个空格中也会显示0。

如果用户输入:1,2,3,q 我如何显示:3 2 1 现在我得到:0 0 0 0 0 0 0 3 2 1

5 个答案:

答案 0 :(得分:2)

如果你必须使用一个数组(而不是ListStack - 它的好处是不像数组一样固定大小)我建议改变:

foreach (var item in userInputs)

为:

foreach (var item in userInputs.Where(z => z != 0))

过滤掉0值。

如果0是有效输入,则考虑更改:

int[] userInputs;

为:

int?[] userInputs;

然后使用:

foreach (var item in userInputs.Where(z => z != null))

答案 1 :(得分:1)

我建议不要采用固定大小的数组,而是采用动态增长的列表:

string userInput;
int userInputInt;
int count = 0;
int arrayLength;
Console.WriteLine("Enter an Integer or a non integer value");

List<int>userInputs = new List<int>();
while (count < 10)
{
    Console.Write("Please Enter the Next Number ");
    userInput = Console.ReadLine();
    if (int.TryParse(userInput, out userInputInt))
    {
        userInputs.Add(userInputInt);
        count = count + 1;
    }
    else
    {
        break;
    }
}

这样,您只需添加与用户实际输入的数字一样多的数字,但最多只能添加。 10。

现在循环你的列表:

foreach(var e in userInputs.Reverse()) { ... }

答案 2 :(得分:0)

这里你必须使用List代替数组,因为输入的数量是未知的/动态的,所以我更喜欢你使用List代替int []。

List<int> userInputs = new List<int>
while (count < 10)
{
     Console.Write("Please Enter the Next Number ");
     userInput = Console.ReadLine();
     if (int.TryParse(userInput, out userInputInt))
     {
            userInputs.Add(userInputInt);
            count = count + 1;
     }
     else
     {
         break;
     }
}

对于以相反顺序打印项目,您可以使用如下循环:

for(int i=userInputs.Count-1;i>=0;i--)
{
    Console.Write(userInputs[i].ToString() + " ");
}

或者只是喜欢this Example

userInputs.Reverse();       
Console.WriteLine(String.Join(",",userInputs));

答案 3 :(得分:0)

有几种选择 您可以将foreach循环更改为:

foreach (var item in userInputs.Take(count).Reverse())

或在一个声明中这样做:

Console.WriteLine(string.Join(" ", userInputs.Take(count).Reverse()));

或使用List<int>,就像其他人所说的那样。

答案 4 :(得分:0)

因为整数的默认值是0,所以当用户只输入3个项目时,他按下输入循环将中断,你将打印这些值和默认值,更糟糕的是你不会区分零与用户或默认值,我建议改用List,然后只添加用户输入的有效值,如下所示:

List<int> userInputs = new list<int>();
while (count < 10)
    {
        Console.Write("Please Enter the Next Number ");
        userInput = Console.ReadLine();
        if (int.TryParse(userInput, out userInputInt))
        {
            userInputs.Add(userInputInt);

        }
        else
        {
            break;
        }
    }