2014-10-19 2 views
0

Я читаю книгу Java, и я наткнулся на интересный цикл. Это выглядит следующим образом:Заявление о инициализации

for(; (j>0) && (tmp < a[j-1]); j--) 

Я понимаю, что (j>0) && (tmp < a[j-1]) является проверка состояния и j-- это приращение. Тем не менее, я не понимаю, где инструкция инициализации.

+0

это первый после 'for (' в вашем случае, ни один –

+0

возможный дубликат [для цикла без объявления индекса] (http://stackoverflow.com/questions/8208503/for-loop-without-index-declaration) –

+0

Вы, вероятно, найдете этот еще один нечетный в какой-то момент, если вы еще этого не сделали: 'for (;;)' – Voicu

ответ

2

В вашем примере нет инструкции инициализации. Это необязательно.

j, вероятно, объявлен и инициализирован перед циклом.

+0

Невероятно быстро, + 1 ... –

+1

определенно, если op не получит ошибку –

1

Обычно вы инициализируете j в первом утверждении в цикле for (который здесь пуст), поскольку он является индексом цикла и обычно используется только внутри цикла. Кроме того, стандартный синтаксис для циклов Java для циклов - for(initialization; termination condition; increment), но язык только предусматривает, что существует три оператора (средний из которых является булевым выражением), поэтому вы можете иметь три пустых оператора for(;;), который создает бесконечный цикл, или вы можете добавить некоторые другой оператор там (за исключением среднего выражения, где ожидается булевское выражение), например for(System.out.println("I was supposed to initialize here"); false && true; logger.log("Nope.")). Конечно, вы не должны этого делать, но это законно.

Примечание: Некоторые заявления было бы незаконным, если поставить на место третьего утверждения, а также, как и объявления переменных, так как она выполняется в конце каждой итерации (см this для более на законных основаниях синтаксиса цикла)

Мне нравится думать, для петель как стенография для общей формы петли в то время, когда вы хотите, чтобы петли несколько раз:

int i= 0;  // Initialization 
while (i< max){ // termination 
    // Do stuff 
    i++;    // increment 
} 

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

0
for(initialization; condition; increment) 

Ни один из них не обязан объявлять цикл for. Если вы хотите, у вас может быть цикл for, например for(;;). Он будет компилироваться без ошибок.

В соответствии с вашим вопросом j уже были инициализированы некоторые из них. Поэтому это прекрасно.

Смежные вопросы