Количество строк на 1 меньше, чем ожидалось в неровном массиве

#c# #jagged-arrays

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

Вопрос:

При печати этого неровного массива я получаю, что количество строк на 1 меньше, чем ожидалось. Он должен начинаться с 0-го индекса по (h-1)-й индекс, создавая в общей сложности h строк. Что я делаю не так?

h — количество строк.

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

        int[][] arr = new int[h][];

        for(int i = 0; i < h;   i)
        {
            arr[i] = new int[i 1]; 
        }

        for(int i = 0; i < h; i  )
        {
            Console.WriteLine();

            for(int j = 0; j < i; j  )
            {
                Console.Write(arr[i][j]   " ");
            }
        }
  

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

1. Сколько строк вы ожидали и сколько строк было на самом деле напечатано?

Ответ №1:

Это потому, что ваш внутренний цикл for имеет условие j < i . Если i равно 0 на первом проходе, внутренний цикл for не будет передан.

Попробуйте с

 for(int j = 0; j < arr[i].Length; j  )
{
  Console.Write(arr[i][j]   " ");
}
  

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

1. Да, это оно!

Ответ №2:

Массивы имеют растущий список элементов, начиная с 1, поэтому, если вы хотите просканировать все элементы:

 for(int i = 0; i < h; i  )
{
    Console.WriteLine();

    for(int j = 0; j < (i   1); j  )
    {
        Console.Write(arr[i][j]   " ");
    }
}
  

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

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

Ответ №3:

Не должно ли это быть:

 new int[i];
  

Вместо:

 new int[i 1]
  

Или это h - 1 ? Просто измените этот индекс массива.

Или вам нужно j < arr[i].Length