Софтуерно Инженерство
Loading...
+ Нов въпрос
res7art avatar res7art 1 Точки

4. Array Rotation

https://pastebin.com/5Za9yXjU

 

Здравейте, имам кода от задачата, но не го разбирам.

Въпроса ми е следния:

Ако с " numbers[numbers.Length - 1] = firstNumber; "

зимаме последния елемент от масив, тогава защо при този for цикъл при дебъг

               for (int j = 0; j < numbers.Length - 1; j++)
               {
                   numbers[j] = numbers[j + 1];
               }

"j" приключва още преди пред последния елемент ? 

Благодаря ви, предварително.

0
Fundamentals Module
Dimitar_Petkov_Petkov avatar Dimitar_Petkov_Petkov 169 Точки
Best Answer

Здравей, колега.

Тук идеята е да се "тренира" индексация на масиви. Тъй като  на индекс 0 е първият елемент, така за да достъпиш последния респективно трябва да ползваш (ако масива има n елемента) n - 1. И тъй като в случая "въртим" данните в масива, така че стойността на текущия индекс да бъде равна на стойността на текущия + 1. Очевидно ако итерираме до n - 1, последното присвояване ще опита да вземе стойност от индекс n - 1 + 1,  т.е от n. Което очевидно излиза извън текущия масив и ще предизвика грешка. Затова for цикъл е до n - 1 без равенство, т.е до  n - 2 реално. Стойноста за n - 1 (последната клетка на масива) се осъществява чрез : numbers[numbers.Length - 1] = firstNumber .

0
res7art avatar res7art 1 Точки

Благодаря ви за отговорите!

0
krum_43 avatar krum_43 182 Точки

Ами не забеляза ли,че въртим цикъла до  j < numbers.Length - 1,т.е не присвоявяме нищо на последният елемент на масива.

На последният елемент сетваме стойността на първия.

:)

0