amirak20 Ответов: 2

Поиск элемента в 2d массиве


Привет, ребята, я пытаюсь написать код, который проверяет, существует ли -1 в 2-мерном массиве, и если он существует, то он считается, но если в одной строке больше одного -1, то он не должен учитываться больше одного раза. например, в нашей строке 1 нашего массива есть два -1, поэтому после проверки и нахождения первого он должен пропустить эту строку и пойти и проверить вторую строку.

это мой код после достижения первого -1 Он увеличивает значение j, которое является количеством строк, и значение a, которое содержит наш конечный результат

Что я уже пробовал:

                                    //  counting the -1
for(int j=0;j<M;j++)
                                   // it should be done with a while loop
    {
        int i=0;
        while (i<N)
        {
            
            if (Play [j] [i] == -1)
            {
                a++;
                j++;
            }
     i++;
        }
       
    }
    
            cout<< a << endl;

2 Ответов

Рейтинг:
2

Rick York

Попробуй :

 for(int j=0; j < M; ++j )  // it should be done with a while loop
{
    int i=0;
    while( i < N )
    {
       if( Play [j] [i] == -1 )
       {
           a++;
           j++;
           break;       // skip out of inner loop
       }
       i++;
    }
}
cout<< a << endl;


Patrice T

Боюсь, что "прорыва" недостаточно, чтобы исправить проблему.

Рейтинг:
1

Patrice T

Похоже, пришло время научиться отлаживать свой код самостоятельно, к счастью, ваш код довольно прост.
Проверьте свой код с помощью

Play [1][5] = -1;
Play [2][2] = -1;

и обратите внимание, какие элементы массива проверяются, а какие нет.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что он делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.

Если отладчик слишком сложен для вас, вы можете изменить свой код, чтобы отслеживать, что он делает.
// initialize array with known value
for(int j=0;j<M;j++)
{
    for(int i=0;i<N;i++)
    {
        Play [j] [i] =0
    }
}// set a few -1
Play [1][5] = -1;
Play [1][6] = -1;
Play [2][2] = -1;
// then put your code with a single change
for(int j=0;j<M;j++)
    {
        int i=0;
        while (i<N)
        {
            if (Play [j] [i] == -1)
            {
                a++;
                j++;
            }
            Play [j] [i] = 2;
            i++;
        }
    }
    cout<< a << endl;
// then print the resulting array, every 0 is untested