如何在java中声明一个类内的对象的ArrayList?

时间:2015-09-05 22:22:50

标签: java class object arraylist

我非常不熟悉java和编程,尽管我正在尝试做一个朋友的家庭练习! :P

练习包括创建一个系统,该系统显示商店中可用的产品列表,使用户能够选择他/她想要的东西,要求确认,然后添加到购物车以便以后结账。

问题是,我正在尝试为产品创建一个类模板,然后将它们全部放在“Product”类的对象的ArrayList中。如果我声明所述列表并在函数中添加我想要的所有对象,但是我无法在类中声明它(就好像它是一个变量的类别)。

以下是代码的一部分:

$var = rand (1,100);
$arr = array(1 => "some html here", ...);

echo $arr[$var];

这样做的目的是通过简单地输入其id来访问有问题的产品对象,这与它在ArrayList中的位置相同。

e.g:

package system;

class Product {

public int id;
public String name;
public double price;

public Product(int startId, String startName, double startPrice){
     startId = id;
     startName = name;
     startPrice = price;
 }

public int getId(){
    return id;
}

public double getPrice(){
    return price;
}
public String getName(){
    return name;
}


}
//Main Class (The one that has the 'main()' function)

public class System {

ArrayList<Product> list = new ArrayList<Product>();
list.add(new Product(0, "Coca-Cola", 3.00));
list.add(new Product(1, "Mountain Dew", 2.00));
list.add(new Product(2, "Mango Smoothie", 4.50));
list.add(new Product(3,"Orange Juice", 5.00));
list.add(new Product(4, "Dr. Pepper", 4.50));
list.add(new Product(5, "Sandwich", 3.00));
list.add(new Product(6, "Hamburger", 3.50));
list.add(new Product(7, "Light Sandwich", 4.00));


//Yadda Yadda Yadda
}

此策略可让您更轻松地访问每个产品,并更好地对其进行模块化,从而允许我在将来添加更改。

唯一的问题是,正如我所说,我无法在课程开始时宣布它。它只能在一个方法中声明,并且只在所述方法中使用,显然。

有关我如何进行的任何建议?我尝试了一些研究,但找不到/理解任何合适的答案。

此外,非常感谢任何有关如何使此代码更整洁的提示。

谢谢!

2 个答案:

答案 0 :(得分:3)

System班级中有一个构造函数,然后

class System {

    List<Product> list = new ArrayList<Product>();
    public class System() {

         list.add(new Product(0, "Coca-Cola", 3.00));
         list.add(new Product(1, "Mountain Dew", 2.00));
         list.add(new Product(2, "Mango Smoothie", 4.50));
         list.add(new Product(3,"Orange Juice", 5.00));
         list.add(new Product(4, "Dr. Pepper", 4.50));
         list.add(new Product(5, "Sandwich", 3.00));
         list.add(new Product(6, "Hamburger", 3.50));
         list.add(new Product(7, "Light Sandwich", 4.00));
    }
}

或者,

你可以

    class System {

        List<Product> list = new ArrayList<Product>(){

             {
                  add(new Product(0, "Coca-Cola", 3.00));
                  add(new Product(1, "Mountain Dew", 2.00));
                  add(new Product(2, "Mango Smoothie", 4.50));
                  add(new Product(3,"Orange Juice", 5.00));
                  add(new Product(4, "Dr. Pepper", 4.50));
                  add(new Product(5, "Sandwich", 3.00));
                  add(new Product(6, "Hamburger", 3.50));
                  add(new Product(7, "Light Sandwich", 4.00));
             }

       };

    }

但这不是写这个的好方法,你不应该像这样在你的代码中硬编码值,

你做不到

System.out.println(list[0].getName); //Prints "Coca-Cola" 

因为list是List,

你可以做到

System.out.println(list.get(0).getName()); //Prints "Coca-Cola"

答案 1 :(得分:1)

如果我理解正确,您无法访问构造函数之外的ArrayList?

您可以在类中声明ArrayList,但随后在构造函数中添加项。

因此...

public class System{
     ArrayList<Product> list = new ArrayList<Product>();

     public System(){
          list.add(param1, param2, param3);
          //add stuff here.
     }


}