首页 > 解决方案 > 如果向后列出打印矩阵,则会失去价值

问题描述

我需要显示一个工作表,以便线条底部和左侧对齐。如果单词中没有 10 个字符,则添加“+”字符的数量,使该行的总数为 10 个字符(参见我的输出)。

为什么,当我打印一个列表时,我会丢失一行?

我的一段代码有什么问题?这个矩阵应该是 10X10。

我的输出

        List<string> filtredList = new List<string>() { "Jacuzzi", "Action", "Chinchilla", "Squeezebox", "Academic", "Abstract" };
        int row = 10;
        filtredList = Sorting(filtredList); //method is sorting by descending.
        foreach (var item in filtredList) Console.WriteLine("Item: " + item + " length: " + item.Length);
        Console.WriteLine("-------------------------------------");
        //AFTER SORTING IN LIST:
        //1)Squeezebox 2)Chinchilla 3)Academic 4)Abstract 5)Jacuzzi 6)Action

        for (int i = 10; i > 0; i--)
        {
            try
            {
                if (filtredList[i].Length != 10)
                {
                    Console.Write(filtredList[i]);
                    row = 10 - filtredList[i].Length;
                    Console.WriteLine(string.Concat(Enumerable.Repeat("+", row)));
                }
                else Console.WriteLine(filtredList[i]);
            }
            catch (SystemException)
            {
                row = 10;
                Console.WriteLine(string.Concat(Enumerable.Repeat("+", row)));
            }   
        } 

标签: c#arrayslistfor-looprow

解决方案


因为您的for循环永远不会达到 0:

for (int i = 10; i > 0; i--)

i从 10 变为 1,这就是为什么您的列表中的第一项从不打印的原因。

笔记:

数组或列表的第一项的索引为 0

更好的代码是:

for (int i = 9; i >= 0; i--)

尽管您可以对某些代码使用更好的替代方案,但这将解决您的问题。

编辑:

您可以使用这种方法(只需将for部分更改为此)不引发任何异常(因为它通常不是 的用例try-catch)并且还可以获得更快的结果:

for (int i = 9; i >= 0; i--)
{
    if (i < filtredList.Count)
    {
        if (filtredList[i].Length != 10)
        {
            Console.Write(filtredList[i]);
            row = 10 - filtredList[i].Length;
            Console.WriteLine(new string('+', row));
        }
        else Console.WriteLine(filtredList[i]);
    }
    else
    {
        row = 10;
        Console.WriteLine(new string('+', row));
    }
}

推荐阅读