Java: <identifier>ожидается с ArrayList - PullRequest
3 голосов
/ 05 апреля 2010

У меня есть класс с именем Storage. Хранилище содержит массив специальных объектов под названием Продукты. Каждый продукт содержит такую ​​информацию, как имя, цена и т. Д. Мой код выглядит следующим образом:

class Storage{

 Product sprite = new Product("sprite",1.25,30);
 Product pepsi = new Product("pepsi",1.85,45);
 Product orange = new Product("orange",2.25,36);
 Product hershey = new Product("hershey",1.50,33);
 Product brownie = new Product("brownie",2.30,41);
 Product apple = new Product("apple",2.00,15);
 Product crackers = new Product("peanut",3.90,68);
 Product trailmix = new Product("trailmix",1.90,45);
 Product icecream = new Product("icecream",1.65,28);
 Product doughnut = new Product("doughnut",2.75,18);
 Product banana = new Product("banana",1.25,32);
 Product coffee = new Product("coffee",1.30,40);
 Product chips = new Product("chips",1.70,35);

 ArrayList<Product> arl = new ArrayList<Product>();

 //add initial elements to arraylist
 arl.add(sprite);
 arl.add(pepsi);
 arl.add(orange);
 arl.add(hershey);
 arl.add(brownie);
 arl.add(apple);
 arl.add(peanut);
 arl.add(trailmix);
 arl.add(icecream);
 arl.add(doughnut);
 arl.add(banana);
 arl.add(coffee);
 arl.add(chips);
}

Всякий раз, когда я компилирую, я получаю сообщение об ошибке в строках 141-153 с указанием <identifier> expected Я знаю, что это элементарная проблема, но я не могу понять это. Любая помощь очень ценится.

Ответы [ 3 ]

7 голосов
/ 05 апреля 2010

Вы не можете вызывать такие методы только в теле класса. Вы должны помещать вызовы методов в другие методы или в конструктор.

Вы хотите это:

class Storage{

    Product sprite = new Product("sprite",1.25,30);
    Product pepsi = new Product("pepsi",1.85,45);
    Product orange = new Product("orange",2.25,36);
    Product hershey = new Product("hershey",1.50,33);
    Product brownie = new Product("brownie",2.30,41);
    Product apple = new Product("apple",2.00,15);
    Product crackers = new Product("peanut",3.90,68);
    Product trailmix = new Product("trailmix",1.90,45);
    Product icecream = new Product("icecream",1.65,28);
    Product doughnut = new Product("doughnut",2.75,18);
    Product banana = new Product("banana",1.25,32);
    Product coffee = new Product("coffee",1.30,40);
    Product chips = new Product("chips",1.70,35);

    ArrayList<Product> arl = new ArrayList<Product>();


    //constructor
    protected Storage(){
        //add initial elements to arraylist
        arl.add(sprite);
        arl.add(pepsi);
        arl.add(orange);
        arl.add(hershey);
        arl.add(brownie);
        arl.add(apple);
        arl.add(peanut);
        arl.add(trailmix);
        arl.add(icecream);
        arl.add(doughnut);
        arl.add(banana);
        arl.add(coffee);
        arl.add(chips);
    }
}
4 голосов
/ 05 апреля 2010

Проблема в том, что ваш код инициализации неуместен. Вы можете:

  • Поместите это в конструктор или другой метод
  • Поместите его в инициализатор экземпляра
  • Поместите его как инициализатор поля

Последний вариант - самое простое и чистое решение; это будет выглядеть примерно так:

List<Product> arl = new ArrayList<Product>(
  Arrays.asList(
    sprite, pepsi, orange, hershey, brownnie, apple, peanut,
    trailmix, icecream, doughnut, banana, coffee, chips
  )
);

Обратите внимание, что я переключил тип arl на его интерфейс List<Product>. По возможности старайтесь работать с интерфейсами, а не с конкретными реализациями.

1 голос
/ 05 апреля 2010

В вашем классе отсутствуют некоторые методы. Используйте конструктор или метод main (public static void main (String [] args) {...}), чтобы заполнить ваш ArrayList.

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