Почему это для цикла массива использует newARRAY.length-1? - PullRequest
0 голосов
/ 18 мая 2019

Здравствуйте, я новичок в Java, теперь я прибыл в массивы. Вот цикл for для сортировки чисел от наивысшего к низшему, мой вопрос, почему инструктор использовал

newARRAY.length-1

?

public static int [] integers;

public static int [] sortArray(int[] array){
    boolean PeaceArray = true;
    int temp;
    int [] newARRAY = Arrays.copyOf(array,array.length);
    while(PeaceArray){
        PeaceArray = false;
        for(int i=0;i<newARRAY.length-1;i++){
            if(newARRAY[i]< newARRAY[i+1]){
                temp = newARRAY[i];
                newARRAY[i] = newARRAY[i+1];
                newARRAY[i+1] = temp;
                PeaceArray = true;

            }


        }


    }

    return newARRAY;
}

Ответы [ 2 ]

1 голос
/ 18 мая 2019

Обычно первый индекс массива Java начинается с нуля (0), но свойство length Массивы дают фактический счетчик массива.

Например, рассмотрим следующий массив целых чисел:

int[] numbers = {40, 55, 63, 17, 22, 68, 89, 97, 89}

Этот массив также может быть представлен графически, как показано ниже array description

Так что, если мы хотим запустить цикл для этого массива, например:

for(int i=0; i<numbers.length; i++){
   //this loop runs 9 times
}

В указанном выше цикле i было инициализировано 0, и максимальное значение i может достигать 8, но цикл будет выполняться 9 раз, потому что если вы посчитаете весь путь от 0 до 8 вы получите 9

Но если вы запустите такой цикл

for(int i=0; i<numbers.length-1; i++){
   //this loop runs 8 times
}

Цикл будет выполняться 8 раз, но максимальное значение, которое может получить i, составляет 7

Ваш инструктор использовал newARRAY.length-1, потому что он не хотел, чтобы максимальное значение i превышало the immediate lower number following newARRAY.length-1, потому что он использовал значение i+1, чтобы индексировать массив newArray где-то в коде.

Если бы он не использовал newARRAY.length-1 в коде, когда i достигнет своего максимального значения, newARRAY[i+1] выдаст ошибку IndexOutOfbounds, потому что последний индекс newARRAY был бы превышен, потому что 1 он добавляет к i для доступа к newARRAY

Надеюсь, вы это поняли.

0 голосов
/ 11 июня 2019

Массив начать индекс с 0

например: int a [] = {1,2,3,4,5}; тогда a.length = 5, но a [5] не выходит из массива

а [0] = 1

а [1] = 2

а [2] = 3

а [3] = 4

а [4] = 5

по этой причине мы используем a.length-1 вместо a.length

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