2013-06-01 3 views
1

Я пытаюсь создать класс, который будет читать текстовый файл имен в массиве, а затем вернуть этот массив в основной класс. Однако при попытке определить массивы возникает ошибка.Ошибка определения массивов в классе

public class Test{ 
String[] foo; 
String[] zoo; 
String[] yoo; 
} 

Я получаю сообщение об ошибке на String [] Yoo

Syntax error on token ";", { expected after this 
token 

Я действительно понятия не имеют, что происходит, может кто-нибудь помочь?

Edit - Фактическая часть кода

String[] swords; 
    String[] prefix; 
    String[] suffix; 
    String[] rarity; 
    String[] colors = {"2","3","4","5","6","7","9","a","b","c","d","e","f"}; 
    String[] bows = new String[3]; 
    String[] enchantments = {"Frost","Igniton","Projection","Explosion","Enhance Jump","Enhance Speed","Resist Flames","Invisibility"}; 
    rarity = new String[1000]; 
    swords = new String[1000]; 
    bows = new String[1000]; 
    prefix = new String[1000]; 
    suffix = new String[1000]; 
+3

Там нет ошибки в вашем классе кода. Можете ли вы поделиться полным кодом –

+1

нет ошибки ... был успешно скомпилирован в моем – pinkpanther

+0

Хорошо, я добавлю фактический код –

ответ

1

Вы не должны инициализировать как это вне конструкторами или методов

Неправильно:

public Test{ 
String[] rarity; 
String[] swords; 
rarity = new String[1000]; 
swords = new String[1000]; 
} 

Вы можете сделать это

public Test{ 
     String[] rarity = new String[1000]; 
     String[] swords = new String[1000]; 
    } 

, если переменные являются статическими вы можете использовать static блок

public Test{ 
    private static int x; 
    static{ 
      x=2; 
    } 

} 

Используйте конструктор вместо инициализации:

public Test{ 
    String[] swords; 
    String[] prefix; 
    String[] suffix; 
    String[] rarity; 
    String[] colors = {"2","3","4","5","6","7","9","a","b","c","d","e","f"}; 
    String[] bows = new String[3]; 
    String[] enchantments = {"Frost","Igniton","Projection","Explosion","Enhance Jump","Enhance Speed","Resist Flames","Invisibility"}; 
    public Test(){ 
    rarity = new String[1000]; 
    swords = new String[1000]; 
    bows = new String[1000]; 
    prefix = new String[1000]; 
    suffix = new String[1000]; 
    } 
} 

Вот и все

+0

Спасибо! Я новичок в java, и я просто пытаюсь понять суть вещей. –

2

Вы не можете присвоить значения полей вне объявлении поля или блока (или конструктора). Так эта линия

rarity = new String[1000]; 

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

String[] rarity = new String[1000]; 
1

, если вы не размещать весь код не представляется возможным чтобы быть уверенным, что ответ правильный.

, но я предполагаю, что у вас есть это:

rarity = new String[1000]; 
swords = new String[1000]; 
bows = new String[1000]; 
prefix = new String[1000]; 
suffix = new String[1000]; 

вне метода. это невозможно в Java.

сделать, как это вместо:

String[] rarity = new String[1000]; 

или инициализировать поле внутри метода/конструктора

+0

После этого в строке 7 все еще есть ошибка, не можете ли вы определить содержимое массива вне метода? –

+0

, пожалуйста, разместите хотя бы первые 20 строк своего класса, я думаю, что у вас есть что-то в строке 7, что не соответствует тому, как работает Java. – Vegard

0

Прежде всего, вы должны сделать их public или private (если вам действительно нужно, чтобы быть пакет- частный).

Массив создается следующим образом: Type[] variableName = new Type[length];

length является размер массива, например String[] test = new String[5] может содержать 5 строк. Чтобы установить их, используйте test[i] = someString;, где i - это индекс (начиная с 0 и заканчивая длиной - 1).

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

ArrayList<Type> variableName = new ArrayList<>();

Например: ArrayList<String> test = new ArrayList<>();

Чтобы добавить его использовать test.add(someString) и получить: arrayList.get(i) где i является индекс.

Недостатком ArrayList является то, что примитивные типы (int, byte, boolean, ...) не могут быть использованы. Вам нужно будет использовать Integer, Byte, Boolean, ...

Если у вас есть ArrayList<Integer>, вы можете intArrayList.add(5), потому что autoboxing преобразует 5 в new Integer(5).

+1

Сделать их общедоступными будет намного хуже, чем оставить их частными. –

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