не понимаю ошибку c#

только учу c# и возникла проблема. Написал код заполнение двухмерного массива как в видео и все работало, вот код из видео:

Console.WriteLine("введите количество элементов по y ");

int y1 = int.Parse(Console.ReadLine());

Console.WriteLine("введите количество элементов по x ");

int x1 = int.Parse(Console.ReadLine());

int[,] ddd = new int [y1, x1];

for (int y = 0; y < ddd.GetLength(0); y++)
{
    for (int x = 0; x < ddd.GetLength(1); x++)
    {
        Console.WriteLine($"введите значение индекса {x} массива под номером {y}");

        ddd[y, x] = Convert.ToInt32(Console.ReadLine());
    } 

В коде видно, что для указание элементов массива, были созданы переменные в циклах for (y,x) но для большего понимания кода я решил указать переменные вне цикла, тот же самый код но только с объявлением переменных вне циклов:

Console.WriteLine("введите количество элементов по y ");

int y1 = int.Parse(Console.ReadLine());

Console.WriteLine("введите количество элементов по x ");

int x1 = int.Parse(Console.ReadLine());

int[,] ddd = new int[y1, x1];
int y = 0;
int  x = 0;
for (; y < ddd.GetLength(0); y++)
{
    for (; x < ddd.GetLength(1); x++)
    {
        Console.WriteLine($"введите значение индекса {x} массива под номером {y}");

        ddd[y, x] = Convert.ToInt32(Console.ReadLine());
    }
    Console.ReadLine();
}

но этот код уже не работал, я мог заполнить только один массив и при вводе некоторого количества элементов выдавало ошибки. Буду рад если объясните в чем дело


Ответы (2 шт):

Автор решения: kurakinvit

В первом случае при каждой итерации внешнего цикла по Y, у вас заново запускался цикл по Х и переменной Х присваивалось значение 0. Во втором случае, у вас запускается цикл по Х, но переменная Х уже имеет значение из предыдущей итерации цикла по Y.

Просто сбрасывайте значение Х в 0 после цикла по Х.

→ Ссылка
Автор решения: CrazyElf
for (int y = 0; y < ddd.GetLength(0); y++)
{
    for (int x = 0; x < ddd.GetLength(1); x++)
    {

В этом коде x обнуляется каждую итерацию цикла по y.

int y = 0;
int  x = 0;
for (; y < ddd.GetLength(0); y++)
{
    for (; x < ddd.GetLength(1); x++)
    {

А в этом коде x обнуляется только один раз - перед началом обоих циклов.

Конструкция циклов придумана именно такой как в первом варианте кода не зря, не нарушайте её, если не понимаете, зачем вы это делаете.

→ Ссылка