2014-05-09 2 views
-10

Почему это ошибка?!?Объявление массива в Java

String[] animationName = new String[2]; 
animationName[0] = "damage_fire1"; 
animationName[1] = "damage_smoke1"; 

Ошибка Syntax error on token ";", expected { after this token

Но нет никакой ошибки, если это просто декларация:

String[] animationName = new String[2]; 
//animationName[0] = "damage_fire1"; 
//animationName[1] = "damage_smoke1"; 

Полного класс (я вырезал некоторый ненужный материал):

public class SmokeDamage { 
    float x, y; 
    float age, duration = 15; 
    Animation animation; 
    String[] animationName = new String[2]; 
    animationName[0] = "damage_fire1"; 
    animationName[1] = "damage_smoke1"; 


    public SmokeDamage(float newx, float newy) { 
     x = newx; 
     y = newy; 
     age = 0; 

    } 
} 
+4

Опубликовать полный метод/класс –

+0

Кажется, ваша ошибка отсутствует в этой выдержке, которую вы опубликовали. –

+5

это не имеет никакого отношения к этому коду. это действительный код java. – kai

ответ

4

Переместить этот фрагмент

animationName = new String[2]; 
    animationName[0] = "damage_fire1"; 
    animationName[1] = "damage_smoke1"; 

внутри конструктора или каким-либо способом.

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

+0

Собственно, он мог сделать это в кодовом блоке, без необходимости изменять конструктор, но я не вижу причин для этого. Итог - переместите его в конструктор, как это предлагается в этом ответе. –

+0

Да, у и есть статический блок? Если да, то он сможет сделать это только один раз, как бы то ни было, поскольку они не являются статическими членами для каждого объекта, этот массив должен присутствовать, чтобы метод был хорошим. –

+0

Нет, а не статический стандартный блок кода {}. Эти блоки выполняются перед конструктором в порядке объявления, поэтому может присутствовать несколько (то же самое для статических блоков, но они выполняются при загрузке класса) –

1

Вы не можете выполнять такие действия, как:

animationName[0] = "damage_fire1"; 
    animationName[1] = "damage_smoke1"; 

нестандартный способ. Это причина вашей ошибки. Переместите их в конструктор или другой метод.

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