2013-11-16 2 views
1

может кто-нибудь найти, почему я получаю сообщение об ошибке в следующем коде:вне переменная не доступна внутри усовершенствован для

public class EnhancedFor { 

    public static void main(String[] args) { 

     int i; 
     int[] test = new int[10]; 

     for(i:test) 
      System.out.print(i+" "); 
    } 

} 
+0

Huh. Я никогда не пытался использовать for-each без объявления переменной итерации в круглых скобках. Я никогда не видел ничего явно, говоря, что вам нужно это делать, но, видимо, вы это делаете. – user2357112

ответ

0

Когда мы пишем for цикла в ней был улучшен вид перебрать контейнер (т.е. массив или коллекция), мы обычно всегда итерация с самого начала к концу. Это утверждение имеет вид:

for (Type VariableDeclaratorId : Expression) 
      Statement 

Тип Type выражения должен быть определен и как или типа Iterable массива или ошибка времени компиляции происходит. Причина, по которой мы должны объявить новый идентификатор переменной с конкретным типом в выражении цикла for-for, заключается в том, что он ограничивает объем идентификатора переменной внутри тела цикла, обеспечивая более clarity and safety.

Согласно the java language specification: 14.14.2 The enhanced for statement

улучшенный утверждение эквивалентно основной для постановки форма:

for (I #i = Expression.iterator(); #i.hasNext();) { 
    VariableModifiers_opt 
TargetType Identifier = 
     (TargetType) #i.next(); 
    Statement 
} 

#i является автоматически генерируетсяидентификатор, который является отдельными из любых других идентификаторов (автоматически сгенерированных или иным образом), которые находятся в области (раздел 6.3) в точке, где выполняется оператор расширенного доступа.

1

Попробуйте что-то вроде:

int[] test = new int[10]; 
for(int i : test) 
    System.out.print(i + " "); 

Для получения дополнительной информации см this

+0

это означает, что ни одна из переменных, объявленных в основном методе, недоступна в расширенном формате или это похоже на ограничение. Это только индекс в цикле. – user3000126

+0

. Вы можете использовать переменные, объявленные в основном методе * в * для каждого цикла , –

0

Вы должны объявить переменную внутри расширенной инструкции для утверждения:

for(int i : test)

1

Возможно, потому что это не является синтаксически правильным. Улучшенный контур выглядит следующим образом:

for(int i : test) { 
    System.out.println(Integer.toString(i)); 
} 
1
public static void main(String[] args) { 

    int[] test = new int[10]; 

    for(int i :test) 
     System.out.print(i+" "); 
} 
Смежные вопросы