Techsster Ответов: 3

В то время как цикл заполняет массив


Я должен был заполнить массив циклом while, вывод должен быть 1, 2, 3, 4, 5.
Я получаю systemindex из диапазона, есть идеи, как это исправить?

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

int[] numbers = new int[5];

          int a = 0;

          while (a <= numbers.Length)
          {
              numbers[i + 1] = i;
              Console.WriteLine(numbers[a]);
              a++;
          }

3 Ответов

Рейтинг:
28

RickZeeland

Попробовать это:

int[] numbers = new int[5];
          int a = 0;

          while (a < numbers.Length)
          {
              numbers[a] = a;
              Console.WriteLine(numbers[a]);
              a++;
          }


George Swan

Хороший ответ. Вы можете сохранить строку, выполнив следующее: консоль.WriteLine(numbers[a++]);. Это не так ясно, как ваше решение, но оно иллюстрирует использование оператора постинкремента

RickZeeland

Я тоже думал об этом, но слишком ленив, чтобы исправить решение :)

Рейтинг:
2

Patrice T

В

numbers[i + 1] = i;

это двойная ошибка:
Во-первых, вы указываете не я, а
numbers[a + 1] = a;

затем вы сохраняете значения в неправильном месте, потому что первая позиция в массиве равна 0
numbers[a] = a+1;


Рейтинг:
0

OriginalGriff

Чтобы добавить к сказанному Риком, индексы массивов в C# запускаются с нуля, поэтому пятиэлементный массив под названием "a" будет иметь пять допустимых индексов:

a[0]
a[1]
a[2]
a[3]
a[4]
Любое другое значение (например, 5 или более, или любое отрицательное значение вообще) является недопустимым, и вы получите сообщение об ошибке - оно находится вне диапазона, диапазон которого составляет от 0 до 4 включительно.

Но длина массива по понятным причинам также начинается с 0: пустой массив без элементов имеет длину 0 (и никаких допустимых значений для его индекса), а массив с одним элементом имеет длину 1 (и только один допустимый индекс: 0), два элемента означают длину 2 (и два индекса: 0 и 1), ... а массив с пятью элементами имеет длину 5 (только индексы 0, 1, 2, 3, 4).

Итак, когда ваш цикл выполняется от 0 до длины включительно:
int a = 0;
while (a <= numbers.Length)
   ...
Тогда индексы, которые вы пытаетесь использовать, являются 0, 1, 2, 3, 4, ... и 5. Последний всегда выдает ошибку, потому что в пятиэлементном массиве есть только пять значений и пять допустимых индексов: 0, 1, 2, 3 и 4.

Вот почему вы почти всегда видите "<" в коде защиты цикла и почти никогда "<="

В этом есть смысл?