Как разорвать цикл, если в массиве не осталось нуля?(C #)

#c# #arrays #multidimensional-array

#c# #массивы #многомерный массив

Вопрос:

Пользователь будет играть в комбинационную игру. Если элемент соответствует номеру, он скажет, что он соответствует, в противном случае он не будет соответствовать. Все совпадающие числа передаются в массив matchedNum . Начальное значение массива matchedNum равно нулям. Как мне остановить цикл, когда в массиве больше нет нулей?

 class Program
{
    public static int[,] memoryNum = { { 2, 1, 7, 3 }, { 5, 4, 9, 6 }, { 3, 7, 2, 4 }, { 6, 5, 1, 9 } };
    public static int[,] matchedNum = { { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } };
    public static int row1 = 0;
    public static int col1 = 0;
    public static int row2 = 0;
    public static int col2 = 0;
    public Boolean matches = true;
    public static int tries = 3;
    static void Main(string[] args)
    {
        for (int i = 0; i < 4; i  )
        {
            for (int j = 0; j < 4; j  )
            {
                Console.Write("* ");
                if (j == 3)
                {
                    Console.WriteLine("");
                }
            }
        }

        while (tries != 0)
        {
            Console.Write("nEnter row(First Num): ");
            row1 = Convert.ToInt32(Console.ReadLine());
            checker(row1);
            Console.Write("Enter col(First Num): ");
            col1 = Convert.ToInt32(Console.ReadLine());
            checker(col1);
            Console.Write("Enter row(Second Num): ");
            row2 = Convert.ToInt32(Console.ReadLine());
            checker(row2);
            Console.Write("Enter col(Second Num): ");
            col2 = Convert.ToInt32(Console.ReadLine());
            checker(col2);

            if (memoryNum[row1 - 1, col1 - 1] == memoryNum[row2 - 1, col2 - 1])
            {
                matchedNum[row1 - 1, col1 - 1] = memoryNum[row1 - 1, col1 - 1];
                matchedNum[row2 - 1, col2 - 1] = memoryNum[row2 - 1, col2 - 1];
                displayMatched(matchedNum);
                Console.WriteLine("Matched!");
            }
            else
            {
                displayNotMatched(memoryNum);
                tries--;
                Console.WriteLine("Did not match, Please try again!");
            }

            //if there's no zero in the array, break;
        }


        if(tries == 0) 
            Console.WriteLine("Number of tries exceeded! Play Again?");
        Console.ReadKey();
    }
}
 

Комментарии:

1. Используйте Break ; он завершает ближайший охватывающий цикл или оператор switch, в котором он появляется. Управление передается оператору, который следует за завершенным оператором, если таковой имеется.

2. @MohitShrivastava Я знаю, что мне нужно использовать break, но я не знаю, как это сделать, используя цикл for . Если я попробую ‘if(matchedNum[i][j]!= 0) break;’ , после этого остальные числа будут проигнорированы. Я думаю, что, если после этого числа будет ноль?

3. Вы спрашиваете if условие для вашего break ? Потому что из прокомментированной части, я так понимаю, вы уже знаете, что вам break как-то нужен цикл.

4. @uteist да! на мой вопрос уже был дан ответ. Мне просто нужно использовать счетчик, ха-ха

5. Так и думал, вы могли бы добавить, int zeroCounter = 0; а затем с каждым совпадением удалять единицу и увеличивать счетчик на 1. Затем вы можете проверить это с помощью if и прервать, когда это необходимо.

Ответ №1:

используйте счетчик, когда он равен 16, больше нет нулей для поиска.

Комментарии:

1. Спасибо! Как раз то, что мне было нужно! Я забыл, что счетчик существует, ха-ха

2. хотя счетчик должен быть равен 8, поскольку он увеличивает каждое совпадающее число, учитывая, что есть только 8 совпадающих чисел, но спасибо!

Ответ №2:

break Оператор завершает ближайший охватывающий цикл или оператор switch, в котором он появляется. Управление передается оператору, который следует за завершенным оператором. Еще