Секция while цикла for выполняет каждый проход или только один раз в Java? - PullRequest
1 голос
/ 09 ноября 2010

например, будет ли это постоянным или изменяться с каждым проходом?

for(int i = 0; i < InputStream.readInt(); i++)

Ответы [ 4 ]

14 голосов
/ 09 ноября 2010
 for(int i = 0;                  // executed once
     i < InputStream.readInt();  // executed before each loop iteration
     i++                         // executed after each loop iteration
    ) {
    ....
 }
0 голосов
/ 09 ноября 2010

Для случаев, когда схема управления является фактически лучшим графическим представлением концепции.

http://upload.wikimedia.org/wikipedia/commons/0/06/For-loop-diagram.png

Я думаю, что основной вопрос - это вопрос: делает

i < InputStream.readInt(); 

выполняется каждая итерация цикла? Да, это так.

В этом случае он не изменяет какую-либо чувствительную переменную, единственная переменная, которая фактически изменяется в вашем коде, это i , но InputStream.readInt() будет запускать каждую итерацию для сравнения и, следовательно, будет запускать readInt() снова на InputStream.

Как насчет чего-то вроде:

for (int i=0; i < xObj.addOne().parseInt(); i++)

(учитывая, что метод addOne возвращает строковое представление целого на единицу больше)

Мой "чек" увеличивает значение, которое будет увеличиваться, если я вызову xObj.addOne (), как обычно? Да. и будет ли он увеличиваться до следующей итерации цикла? Да.

Это как делать

 int x = 0;
 for (int i=0; i < ++x; i++);

Это никогда не прекратится, поскольку ++ x всегда больше, чем x (что также i)

А как насчет нетривиального примера?

int x = 6;
for (int i=0; i < x--; i++) {
    System.out.print(i+" ");
}
* * 1 042 выходы
0 1 2
0 голосов
/ 09 ноября 2010

Первый раздел выполняется один раз перед началом цикла.Второй раздел проверяется перед каждым циклом, и если он равен true, цикл выполняется, если false, цикл прерываетсяПоследняя часть выполняется после каждой итерации.

0 голосов
/ 09 ноября 2010

Выполняется каждый раз.Синтаксис for является сахаром для

int i = 0
while(true)
{
    if(!(i < InputStream.readInt()))
    {
        break;
    }
    // for body
    i++
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...