我正在创建一个创建ASCII图像的程序。基于asterix输入,它产生不同的东西。开始我正在制作一个基本的大纲但是我有一个问题,我在上次循环迭代检查时无法添加内容。
方法代码:
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]来决定某事。有没有办法检查它是否会抛出异常?
答案 0 :(得分:0)
您可以使用OR(||)语句检查是否已到达数组的末尾。如果OR语句的第一个语句返回true,则不检查第二个语句。这称为short-circuiting。在这种情况下不应该抛出任何错误。
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;
}
答案 1 :(得分:0)
将if (li < curLine.Length - 1)
更改为if (i < curLine.Length - 1)