`числа [числа.длина — 1]; ` является диапазоном или отдельным элементом?

#java

#java

Вопрос:

Я прочитал такое решение для поворота массива

вопрос:

 public class Solution {
    public void rotate(int[] nums, int k) {
        int temp, previous;
        for (int i = 0; i < k; i  ) {
            previous = nums[nums.length - 1];
            for (int j = 0; j < nums.length; j  ) {
                temp = nums[j];
                nums[j] = previous;
                previous = temp;
            }
        }
    }
}
  

Я в замешательстве по поводу previous = nums[num.lengh -1] ,

это диапазон как nums[0:10] или один элемент как nums[0] ?

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

1. Это один элемент, потому что num.lengh -1 просто дает вам последний доступный индекс массива.

2. о, спасибо, я понял, постоянно меняйте местами текущий и предыдущий, не могли бы вы, пожалуйста, передать комментарий для ответа @deHaar

Ответ №1:

Это один элемент, он занимает элемент в num.length -1 позиции, а значение внутри заменяется на nums[j] : для j=0 вас есть:

 temp = num[0];
num[0] = num[num.length-1]
num[num.length-1] = temp;
  

И так далее.

Ответ №2:

Это один элемент, потому что num.lengh - 1 является int и просто дает вам последний доступный индекс массива.

Если вы проверите, равна ли длина массива > 0 , то вы можете безопасно использовать длину массива для определения последнего доступного индекса.

Длина массива очень часто используется в циклах, подобных вашему:

Здесь длина используется, чтобы убедиться, что вы не получаете доступ к недоступным индексам:

 for (int j = 0; j < nums.length; j  )
  

Вы можете написать немного другое условие без изменения функциональности

 for (int j = 0; j <= nums.length - 1; j  )
  

Но если вы сделаете следующее, вы получите IndexOutOfBoundsException :

 for (int j = 0; j <= nums.length; j  ) 
  

Последняя итерация будет пытаться получить доступ к nums[nums.длина], которого там нет…

Ответ №3:

nums[nums.length - 1]; выдает последнюю позицию массива. Это -1, потому что позиции массива начинаются с 0, а не с 1.

Если вы не напишете -1, вы получите исключение за пределами.

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

1. Как насчет nums[-1] , я думаю, что эта нарезка может легко извлечь последний элемент.

2. Это не имеет никакого смысла. вы получите исключение. Внутри [] вы должны указать положение элемента внутри нужного вам массива. Это должно быть положительное число, начинающееся с 0

Ответ №4:

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

чтобы получить все значения, вы должны выполнить цикл, подобный циклу for и т.д.

 for (i = 0; i < array.length; i  ) {
 System.out.print(array[i]);
}