Java для цикла, объявляющего инициализацию снаружи - PullRequest
0 голосов
/ 04 октября 2018

В соответствии с документацией Oracle for цикл формируется в том виде, в котором мы его знаем:

for (initialization; termination; increment) {
    statement(s)
}

Например,

class ForDemo {
    public static void main(String[] args){
         for(int i=1; i<11; i++){
              System.out.println("Count is: " + i);
         }
    }
}

Почему мы не можем объявить часть инициализации вне поля forпетля, как это?

 class ForDemo {
    public static void main(String[] args){
         int i = 1;
         for(i; i<11; i++){
              System.out.println("Count is: " + i);
         }
    }
}

Ответы [ 4 ]

0 голосов
/ 30 октября 2018

Цитирование документов Java

лучше всего объявить переменную в выражении инициализации.Имена i, j и k часто используются для управления циклами;объявление их в выражении инициализации ограничивает срок их службы и уменьшает количество ошибок.Три выражения цикла for являются необязательными;бесконечный цикл можно создать следующим образом:

// infinite loop
for ( ; ; ) {

    // your code goes here
}

Итак, я пропустил это.Это возможно, но не выгодно.Оставьте пустую часть инициализации - решение

  for (  ;i <= 10 ; i++ ) {

        // i is defined outside already
    }
0 голосов
/ 04 октября 2018

Вы можете:

 for(; i<11; i++){
      System.out.println("Count is: " + i);
 }

Но область действия i отличается.i теперь будет существовать вне цикла.

0 голосов
/ 04 октября 2018

Что в действительности происходит в цикле for, что

BasicForStatement:
    for ( ForInit ; Expression; ForUpdate ) 

Для инициализации требуется утверждение, как сказано в документации

Если код ForInit представляет собой список выражений операторов

Из Java Docs

Так что в этом коде

 for(i; i<11; i++){ 
      System.out.println("Count is: " + i);
 }

i не является уставом, это просто переменная.Так что же такое утверждение?

Заявления примерно эквивалентны предложениям на естественных языках.Оператор формирует законченную единицу исполнения.Следующие типы выражений можно превратить в оператор, завершив выражение точкой с запятой (;).

Assignment expressions
Any use of ++ or --
Method invocations
Object creation expressions

С этим знанием вы можете работать с любым циклом for, если вы знаете, что такое statemnt дляПример этого для цикла работает

int i = 1; // Initializated
for(i++; i<11; i++){ // Whit a statemnt
    System.out.println("Count is: " + i);
}

и вывод будет:

Count is: 2
Count is: 3
Count is: 4
Count is: 5
Count is: 6
Count is: 7
Count is: 8
Count is: 9
Count is: 10
0 голосов
/ 04 октября 2018

Можно.Однако у вас просто будет пустое ;, в котором обычно происходит инициализация:

int i = 1;
for(; i<11; i++){
    System.out.println("Count is: " + i);
}

Разница в том, что область действия i теперь расширена за пределы цикла.Который может быть тем, что вы хотите.В противном случае лучше всего сохранять переменные в максимально узкой области.Как говорят документы для цикла for:

объявление их в выражении инициализации ограничивает срок их службы и уменьшает количество ошибок.

Вывод:

Count is: 1
Count is: 2
Count is: 3
Count is: 4
Count is: 5
Count is: 6
Count is: 7
Count is: 8
Count is: 9
Count is: 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...