readline 上的 C# string.split 未产生预期的数组长度

C# string.split on readline not producing expected array length

大家好,我正在继续开发我的第一个应用程序,主要是为了学习,没有别的。我希望用户能够输入 2d6+4 或 2d6,您应该能够用这些数字替换任何数字。我在解析信息时遇到错误,我认为它与包含比我预期的更多或更少的值的数组有关,或者由于某种原因它留下了分隔符。输入 2d6+4 或 2d6 +4 工作正常,2d6然而并没有,这是我认为 if 语句应该防止的。有什么想法吗?

        Console.WriteLine("Please type the roll you would like to perform, for example - 2d6+4");
        var rollLine = Console.ReadLine();
        var diceLine = rollLine.Split(new Char[] { 'd', '+' }, StringSplitOptions.RemoveEmptyEntries);
        diceCount = int.Parse(diceLine[0]);
        diceType = int.Parse(diceLine[1]);
        if (rollLine.Length > 2)
        {
        bonus = int.Parse(diceLine[2]);
        }
        else
        {
            bonus = 0;
        }

当用户输入“2d6”时,字符串长度为3,即满足以下规则

if (rollLine.Length > 2)

但是,根据您的逻辑,您将在 diceLine 中获得 2 个项目的数组,即 diceLine[0] 和 diceLine[1],但在条件长度为您调用不存在的 diceLine[2] 之后。

即要么将条件更改为

if (rollLine.Length == 5) // 2d6+4

或者检查数组的长度

if (diceLine.Length > 2) 

您希望 IF 检查 rollLine 长度是否大于 3,而不是 2。 由于您要输入的最小值是例如 2d6,因此您只想在 rollLine 超过 3 个字符时检查奖金。

if (rollLine.Length > 3)
{
    bonus = int.Parse(diceLine[2]);
}

看来您只是在长度比较中使用了错误的变量。您正在比较字符串的长度,而不是拆分数组的长度。应该是:

if (diceLine.Length > 2)