检查下一个循环迭代数据,除非在循环结束c#
本文关键字:循环 结束 下一个 迭代 数据 检查 | 更新日期: 2023-09-27 18:15:33
我正在制作一个创建ASCII图像的程序。根据星号的输入,它会产生不同的结果。首先,我做了一个基本的大纲,但我有一个问题,我不能添加一些东西时,检查最后的循环迭代。
方法代码:
private List<string> DrawOutline(List<string> inputLines)
{
List<string> output = new List<string>();
int door = r.Next(0, inputLines.Last().Length);
for (int li = 0; li < inputLines.Count; li++)
{
char[] curLine = inputLines[li].ToCharArray();
string outputLine1 = string.Empty;
string outputLine2 = string.Empty;
for (int i = 0; i < curLine.Length -1; i++)
{
Console.WriteLine(curLine[i]);
if (curLine[i] == '*')
{
outputLine1 += "+---";
outputLine2 += "| ";
}
else
{
outputLine1 += " ";
outputLine2 += " ";
}
if(li < curLine.Length - 1)
{
if (curLine[i] == '*' && curLine[i + 1] != '*')
{
outputLine1 += "+";
outputLine2 += "|";
}
}
}
output.Add(outputLine1);
output.Add(outputLine2);
}
return output;
}
当我运行这个时,它工作得很好,但是不会将'+'和'|'添加到outputLines的最后一行。这是因为:
if(li < curLine.Length -1)
然而,如果没有-1,它将抛出一个异常,因为我正在使用[I +1]来决定某事。是否有一种方法可以检查它是否会抛出异常?
可以使用OR(||)语句检查是否到达数组的末尾。如果OR语句的第一个语句返回true,则不检查第二个语句。这就是所谓的短路。在这种情况下不应该抛出错误。
private List<string> DrawOutline(List<string> inputLines)
{
List<string> output = new List<string>();
int door = r.Next(0, inputLines.Last().Length);
for (int li = 0; li < inputLines.Count; li++)
{
char[] curLine = inputLines[li].ToCharArray();
string outputLine1 = string.Empty;
string outputLine2 = string.Empty;
for (int i = 0; i < curLine.Length -1; i++)
{
Console.WriteLine(curLine[i]);
if (curLine[i] == '*')
{
outputLine1 += "+---";
outputLine2 += "| ";
}
else
{
outputLine1 += " ";
outputLine2 += " ";
}
if (curLine[i] == '*' && (curLine.Length == i+1 || curLine[i + 1] != '*'))
{
outputLine1 += "+";
outputLine2 += "|";
}
}
output.Add(outputLine1);
output.Add(outputLine2);
}
return output;
}
将if (li < curLine.Length - 1)
更改为if (i < curLine.Length - 1)