检查下一个循环迭代数据,除非在循环结束时c#

时间:2015-10-01 11:09:16

标签: c# for-loop

我正在创建一个创建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]来决定某事。有没有办法检查它是否会抛出异常?

2 个答案:

答案 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)