#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, в котором он появляется. Управление передается оператору, который следует за завершенным оператором. Еще