Как записать двумерное поле логических значений в консоль? - PullRequest
0 голосов
/ 20 июня 2019

У меня проблемы с этим домашним заданием.В задании нам нужно рассчитать кратчайший путь от A до B, используя BFS.Однако сначала я хочу объявить двумерное поле с логическими значениями, в котором «истина» является проходной плиткой, а «ложь» - непроходимой.Только символы:. + ?!допустимы, все остальные - нет.

В первой строке я объявляю длину и ширину плоскости, представленной целыми числами h и b (игнорируем m).Длина поля выполнена правильно, ширина - нет.Ширина должна быть количеством символов, равным b.Это то, что я имею до сих пор.

static void Main()
{
        int b, h;
        string m;

        string firstLine = Console.ReadLine();
        string[] declaration = firstLine.Split(' ');
        int.TryParse(declaration[0], out b);
        int.TryParse(declaration[1], out h);
        m = declaration[2];

        var input = new bool[h,b];
        for (int i = 0; i < h ; i++)
        {
            string s = Console.ReadLine();

            for (int j = 0; j < b ; j++)
            {
                foreach( char c in s)
                {

                    if (c.Equals('.') || c.Equals('!') || c.Equals('+') || c.Equals('?'))
                    {
                        input[i, j] = true;
                    }
                    else
                    {
                        input[i, j] = false;
                    }
                }
            } 
        }
        Console.WriteLine(input);
        Console.ReadLine();
    }
}

Пример ввода с желаемым выходом:
вход:
6 6 L (игнорировать L)
MMMMMM
M...? M
M .... M
M + ... M
M ...! M
MMMMMM

желаемый вывод:
false false false false falsefalse false
false true true true true false false
false true true true true true false
false true true true true true false
false true true true true true false
false false false false false false false false 1022 *

На данный момент я все еще могу набирать столько символов в строке, сколько я хочу, а не желаемый максимум b.

Также консоль теперь пишет System.Boolean [,]

Что я делаю не так?

1 Ответ

1 голос
/ 20 июня 2019

ваши циклы не работают как положено! в основном у вас нет ненужного вложения, цикл foreach проходит всю строку, в то время как двумерный массив остается с тем же индексом, также всякий раз, когда вводится входной код, код идет справа от массива, а не идет вниз. чтобы исправить обе эти проблемы, я бы сначала перебрал значения y и удалил цикл foreach:

for (int y = 0; y < b ; y++)
        {
            string s = Console.ReadLine();

            for (int x = 0; x < h ; x++)
            {
                    char c = s[x];

                    if (c.Equals('.') || c.Equals('!') || c.Equals('+') || c.Equals('?'))
                    {
                        input[x, y] = true;
                    }
                    else
                    {
                        input[x, y] = false;
                    }

            } 
        }

РЕДАКТИРОВАТЬ : Я предлагаю циклически проходить по массиву для записи значения, консоль просто напечатает тип объекта, если вы передадите его ему напрямую.

...