C # массивы за пределами - PullRequest
0 голосов
/ 01 декабря 2018
        Random rnd = new Random();

        int[] numbeo = new int[100];

        for (int index = 0; index <= numbeo.GetLength(0) - 1; index++)
        {
            numbeo[index] = rng.Next(100);
            Console.WriteLine(numbeo[index]);
        }

Я работал с компанией, которая называется funtech, и это строка, чтобы показать мне, как делать массивы в c #, я очень хорошо понимаю, но единственное, чего я не понимаю, это когда мне нужно numbeo.GetLength -1 Почему мне нужно минус один.

Я думаю, что это связано с этим, скажем, например, у меня есть массив случайных чисел:

59, 64, 53, 4,89. 0, 1, 2, 3, 4.

Я думаю, что когда вы пытаетесь использовать -1, он перемещает все значения назад, так что теперь он делает это.

59, 64,53, 4, 89. 1, 2, 3, 4, 5.

Прав ли я с этим

Ответы [ 4 ]

0 голосов
/ 01 декабря 2018

Это потому, что первый индекс массива равен нулю.Поэтому, если ваш массив пуст, то мы можем сказать, что он содержит 0 элементов, а его длина также равна 0. Если массив имеет 1 элемент с индексом 0, его длина равна 1. Если массив имеет 2 элемента, его длина равна 2 и т. Д.и так далее.Однако в некоторых языках индекс массива начинается с 1, а не с 0 (например, Fortran, Matlab, Smalltalk), но здесь мы говорим о c #.

0 голосов
/ 01 декабря 2018

Длина массива всегда возвращается, зависит от его размера, но значение индекса всегда начинается с нуля.

Пример: если вы создаете массив int [] numbeo = new int [100], тогда функция длины вернет длину100 и массив не имеет значения индекса 100, так как он начинается с нуля.

Console.Write("length :"+numbeo.GetLength(0)); 
0 голосов
/ 01 декабря 2018

Нет, это не имеет никакого отношения к сгенерированным значениям.Массивы в C # начинаются с нуля, что означает, что первый индекс массива равен 0.

string[] elements = new string[3]; // String array with 3 elements, indexes: 0, 1, 2
elements[0] = "Firt element"; // Ok
elements[1] = "Second element"; // Ok
elements[2] = "Third element"; // Ok
elements[3] = "Out of bounds"; //Throws an error

. Метод .GetLength (0) сообщает, что дает длину первого измерения (0 - этопервый по размерам).В одномерных массивах это то же самое, что и .Length.

Console.WriteLine(elements.GetLenght(0)); // Prints 3 to console
Console.WriteLine(elements.Length); // Prints 3 to console

Таким образом, вы можете использовать

numbeo.Length

-1 означает, что цикл for использует меньше или равно состояние, в вашем случае.Цикл for идет от 0 до 100, потому что размер вашего массива numbeo равен 100. И поскольку 100 является первым недопустимым индексом в этом массиве, вы должны вычесть 1, чтобы перейти только к 99. Короче, это слишком сложно, используйте <вместо <= и используйте .Length вместо GetLength (0) </p>

    for (int index = 0; index < numbeo.Length; index++)
    {
        numbeo[index] = rng.Next(100);
        Console.WriteLine(numbeo[index]);
    }

Этот forloop имеет значение от 0 до 99 (включая оба конца), которые являются точным допустимым диапазоном индексов этого массива.

0 голосов
/ 01 декабря 2018

Попробуйте это

    Random rnd = new Random();

    int[] numbeo = new int[100];

    for (int index = 0; index < numbeo.Length  ; index++)
    {
        numbeo[index] = rng.Next(100);
        Console.WriteLine(numbeo[index]);
    }
...