C# string.split на readline не производит ожидаемую длину массива - PullRequest
0 голосов
/ 14 апреля 2020

Привет, ребята, просто продолжаю работать над моим первым приложением, в основном для обучения и ничего больше. Я хочу, чтобы пользователь мог вводить 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;
        }

Ответы [ 3 ]

2 голосов
/ 14 апреля 2020

Похоже, вы просто используете неверную переменную для сравнения длины. Вы сравниваете длину строки, а не длину разделенного массива. Должно быть:

if (diceLine.Length > 2)
1 голос
/ 14 апреля 2020

Когда пользователь ввел «2d6», длина строки равна 3, то есть следующее правило истинно

if (rollLine.Length > 2)

Однако согласно вашей логике c вы получите массив из 2 элементов в diceLine, т.е. diceLine [0] и diceLine [1], но после условия с длиной вы вызываете diceLine [2], который не существует.

Т.е. либо измените условие на

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

, либо проверьте наличие длина массива

if (diceLine.Length > 2) 
0 голосов
/ 14 апреля 2020

Вы хотите, чтобы ваш IF проверял, если длина rollLine больше 3, а не 2. Поскольку наименьшая вещь, которую вы вводите, это, например, 2d6, вы хотите проверять бонус только тогда, когда rollLine больше более 3 символов.

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