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)
大家好,我正在继续开发我的第一个应用程序,主要是为了学习,没有别的。我希望用户能够输入 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)