2015-05-06 2 views
-1

Таким образом, я знаю, что вы можете иметь несколько операторов в пределах каждого параметра для цикла, такие как:Java Для Loop Termination Параметр

for(int i=0, int j=0; i<10 , j<14; i++, j=j+2){} 

, но это второй параметр трактуется как «и» заявление или «или» заявление? Остановится ли она, когда «j» станет больше 14 или будет продолжаться до тех пор, пока «i» не станет больше 10?

+5

Ваш фрагмент кода делает не компилировать. [Docs] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html) являются хорошим чтением. –

+1

Второй параметр должен быть условным, а 'i <10, j <14' не является условным. –

+1

Такое происходит в C, но не в Java. В Java вы получите ошибку времени компиляции.В C, однако, только самое правое выражение в списке, разделенном запятой, «подсчитывается», хотя все оцениваются ... – BadZen

ответ

2

Это не собирается компилироваться. У вас не может быть списка, разделенных запятыми, для второго параметра. Это будет компилировать:

параметр
for(int i=0, j=0; i<10 && j<14; i++, j=j+2){} 
+0

Это делает для меня намного больше смысла. Спасибо огромное! – 1234567power

1

Прекращение должен быть один логический оператор, i<10 && j<14 был бы приемлем, i<10 , j<14 не будет.

0

Это прояснит ситуацию. Запуск программы
i и j - 2 переменные, которые они могут использовать в зависимости от того, как вы хотите их использовать. Если вы не изменяете значение j, то оно может использоваться как терминатор.

public class TestProgram { 
    public static void main(String[] args){ 

      for (int i = 0, j = 1, k = 2; i < 5; i++) { 
       System.out.println("I : " + i + ",j : " + j + ", k : " + k); 
      } 
      /* 
      * Please note that the variables which are declared, should be of same 
      * type as in this example int. 
      */ 

      // THIS WILL NOT COMPILE 
      // for(int i=0, float j; i < 5; i++); 

     } 
+0

Это совсем не ответ ** **. –

+0

В программе объясняется, как он может использовать несколько параметров в цикле for. Второй параметр может быть как завершающим условием –

+0

@LuiggiMendoza действительно даже запускал мою программу !!! –

0

От JLS 14.14.1 The basic for Statement:

BasicForStatement:

for ([ForInit] ; [Expression] ; [ForUpdate]) Statement 

Первая часть, [ForInit] должна быть декларация переменной или набор переменных одного и того же тип:

Если код ForInit представляет собой список выражений операторов (§14.8), выражения вычисляются последовательно слева направо; их значения, если они есть, отбрасываются.

Вторая часть, [Выражение] должно быть boolean:

Выражение должен иметь тип boolean или Boolean, или ошибка в время компиляции происходит

Итак, ваше текущее объявление цикла for не отвечает этим условиям. Давайте посмотрим, почему:

for(
    int i=0, int j=0; //you cannot declare a list of variables like this 
         //you can test this by moving this piece of code 
         //out of the for loop 
    i<10 , j<14; //this expression doesn't return a boolean nor a Boolean 
    i++, j=j+2 //this one is right 
    ) { 
    //... 
} 

Таким образом, правильный путь, чтобы объявить этот for цикл будет:

for(
    int i=0, j=0; 
    i<10 && j<14; 
    i++, j=j+2 
    ) { 
    //... 
} 

Который, в одном ЛСС будет:

for(int i=0, j=0; i<10 && j<14; i++, j=j+2) { 
    //... 
} 
+0

прохладный !! Я постараюсь быть более подробным в следующий раз, отвечая. –