Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему такой синтаксис при использовании декремента в цикле?

Татьяна Миронова Ученик (144), на голосовании 1 год назад
Всем привет, у меня вот такой вопрос.

Я создаю массив.
 int[] arr = {1,2,3,4,5}; 

Вывожу все элементы через цикл.
 for(int i=0; i   System.out.print(arr[i]);  
}

А вот дальше у меня возникло непонимание, когда я захотела вывести все элементы в обратном порядке. Почему такой синтаксис?

Сначала я написала вот так:
 for(int i=arr.length; i>0; i--){
System.out.print(arr[i]);
}

И оно нифига не сработало. Перепробовав несколько вариантов, я написала вот так, после чего все стало ок:
 for(int i=arr.length; i>0;){  
i--;
System.out.print(arr[i]);
}

И вот, собственно, может ли кто-нибудь, пожалуйста, объяснить, почему так? Почему пришлось вынести декремент за скобки? Так еще и точка с запятой после i>0, как оказалось, обязательная. Есть ли этому какое объяснение или нужно просто запомнить, что именно в этом случае нужно писать вот так?
Голосование за лучший ответ
Терр Онтал Мудрец (12751) 1 год назад
Не надо выносить ничего за скобки. У тебя не сработало, потому что ты в первой же итерации выходишь за границы массива. Надо так:
 for(int i=arr.length-1; i>=0; i--){ 
System.out.print(arr[i]);
}
Терр ОнталМудрец (12751) 1 год назад
Ну и сам подумай, что происходит, когда i=arr.length? Разве существует элемент в массиве с индексом, равным длине массива?
Татьяна Миронова Ученик (144) Терр Онтал, да-да-да, точно...до меня дошло. У меня была мысль попробовать написать arr.length-1, но я бегло глянула и подумала, что типа какая разница, если я просто напишу условие i>0, значит из диапазона не выйду. Теперь поняла. В первой итерации переменная будет хранить в себе значение индекса, которого не существует. Спасибо за помощь)
Похожие вопросы