2015-09-05 48 views
1

我对java和编程非常不熟练,尽管我正在尝试做我朋友的家庭练习之一! :P如何在java中的类中声明一个ArrayList对象?

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

问题是,我试图为产品制作一个类模板,然后将它们放在类“产品”类的一个ArrayList中。如果我声明所述列表并在函数内添加所需的所有对象,但我无法在类中声明它(如同它是一个变量类型),则可以正常工作。

下面是部分代码:

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 
} 

这样做的目的是为了能够通过简单地输入其ID,这等同于它的ArrayList中的位置来访问有问题的产品对象。

例如为:

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

这种策略使得它更容易访问的每个产品,并进行模块化更好,让我在未来增加的变化。

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

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

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

谢谢!

+0

提示:使用接口代替实现==列表代替ArrayList :) – bartektartanus

回答

2

有你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)); 
      } 

     }; 

    } 

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

而且你可以n OT做

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

,因为列表是一个List,

你可以做

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

谢谢!此外,如果我可能会再问几个问题: –

+0

@OphirNeto如果您没有向应用程序中引入产品,则必须重新编译该项目,并且您将永远无法本地化此应用程序,因为您对这些值进行了严格的编码,如果你这样做是为了理解java,那么从这里开始并学习设计模式。因为编写代码的正确方式更依赖于你想实现的目标 –

+0

我明白了......你的意思是我基​​本上不能在不重写代码的情况下增加或减少产品,对吧? 我记得一个人不能添加更新的产品,也不能改变他们内部的任何东西。为了简单起见,我这样写了它们,因为我不需要额外的功能和动态。 感谢您的所有提示! –

1

如果我理解正确的话,你可以不是你的构造函数的外部访问的ArrayList?

你可以在类中声明ArrayList,但是在构造函数中添加项。

所以...

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

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


} 
+0

谢谢! Netbeans没有显示任何警告,所以这应该是它! –

相关问题