c# - 如果向后列出打印矩阵,则会失去价值
问题描述
我需要显示一个工作表,以便线条底部和左侧对齐。如果单词中没有 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)));
}
}
解决方案
因为您的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));
}
}
推荐阅读
- java - 无法启动 Hybris 服务器
- vue.js - 如何跟踪存储在 Vuex(store) 中的属性的变化并根据该值执行一些方法?
- python - image.save() 不保存具有指定名称的文件
- python-3.x - 如何在 Python3/PyQt5 中以超链接格式显示程序的输出结果?
- ios - 如何为 React Native iOS UI 组件扩展 UIViewController?
- javascript - 如何使用 Chrome 浏览器在 ASP.Net 中停止将输入类型自动填充为密码
- phpmyadmin - podman 是否可以在同一个 pod 的同一个端口中运行两个容器?
- c - 如何全局使用可变长度数组?
- java - 不时发出的字符串通量
- oracle - 如何从oracle中的字符串中仅删除左括号和右括号?