2015-09-05 80 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沒有顯示任何警告,所以這應該是它! –

相關問題