2013-07-08 58 views
1

讓我粘貼我的整個問題。請考慮我的英語,我有點虛弱。通過方法實現並向ArrayList添加項目

問題:一個調度系統遵循銷售訂單,根據訂購的物品發送 需要正確包裝的物品。假設商店出售富有藝術價值的古董物品。這些藝術品 可以歸類爲'易碎'項目。在店裏出售的兩種易碎物品是 ,它們是'陶器'和'玻璃器皿'。每件商品都需要與適當的 包捆綁在一起。捆綁有兩種類型,即「BubbleWrap」或「緩衝」。易碎物品 泡沫包裝完成,使用非易碎物品「緩衝」。 然後,您需要創建一個ARTITEM類,其中包含Artpieces ArrayList和一個Dispatcher,用於打包不同類型的artitem對象,該對象可以被識別爲易碎。 Salesorder是我們的演示課程,它將使用Dispatcher來包裝一個artitem?

我有一個接口Artpiece.java。我有ArtItems.java類,並在ArtItems中實現了Artpiece.java對象。

我的問題是,我需要從Artpeice的ArrayList中添加項目,Artpiece基本上會有脆弱的項目。例如[addItem(Artpiece artpiece)],那麼我需要設置getCost()方法的總價格。然後顯示哪個易碎項目。

我不知道如何從ArrayList中獲取值。每當我嘗試存儲數組列表時,它都會給出錯誤。

請參閱我下面的編碼:

//Artpiece.java 
interface Artpiece{ 
    public String name(); 
    public Bundling bundling(); 
    public float price(); 

} 

//Bundling.java 
interface Bundling{ 
    public String bundle(); 
} 

//Cushioning.java 
public class Cushioning implements Bundling{ 
    //Override 
    public String bundle() { 
     return "Cushioning"; 
    } 
} 


//BubbleWrap.java 

public class BubbleWrap implements Bundling{ 
    public String bundle() { 
     return "BubbleWrap"; 
    } 

//ArtItem.java 
import java.util.ArrayList; 
public class ArtItems implements Artpiece{ 

    ArrayList<Artpiece> artpiece = new ArrayList<Artpiece>(); 

    artpiece.add(void price()); 

    //Override 
    public String name() { 

     return "Pottery"; 
    } 

    //Override 
    public Bundling bundling() { 

     return null; 
    } 

    //Override 
    public float price() 
    { 
     return 25; 
    } 

    public float getCost() 
    { 
     int sum=1, total = 0; 
     return total += sum; 

    } 

    public void addItem(Pottery pottery) 
    { 


    } 
    public void addItem(GlassWare glassWare) 
    { 


    } 

    public void showItems() { 


    } 



} 
} 

//Now I am posting the driver classes. 

//Dispatcher.java 
public class Dispatcher { 
     public ArtItems prepareFGitem(){ 
     ArtItems artitems = new ArtItems(); 
     artitems.addItem(new Pottery()); 
     artitems.addItem(new GlassWare()); 
      return artitems; 
     } 
} 

//Salesorder.java 
public class Salesorder { 
    public static void main(String[] args) { 
    Dispatcher dispatcher = new Dispatcher(); 
     ArtItems FGartitem = dispatcher.prepareFGitem(); 
     System.out.println("Fragile Items"); 
     FGartitem.showItems(); 
     System.out.println("Total Cost: " +FGartitem.getCost()); 
    } 
} 
+0

有代碼中的錯誤。 '無效價格'應該被刪除。另外,改變你的命名。這是藝術品,而不是藝術品。您想將artpiece添加到artpieces列表中,如artpieces.add(新Artpiece()); –

+0

你在哪裏定義了使用artpiece.add的add(void price())?你定義的價格函數也返回一個浮點數,你爲什麼用void調用它? – user2497624

+0

另外,將東西添加到列表的位置不正確。只能調用在另一個方法中或在構造函數或初始化程序塊中添加項目的方法。我建議用一種方法來做,這對你來說可能是最簡單的。還要堅持使用小寫變量和大寫類的慣例。你的'FGartitem'應該被稱爲'artItems',或類似的東西。 –

回答

0

感謝大家的貢獻。我解決了問題,自己做一些我自己的研究後:你可以參考,我已經發布了答案,它是100%working.The編碼是如下:

//Artpiece.java 
interface Artpiece{ 
    public String name(); 
    public Bundling bundling(); 
    public float price(); 

} 

//BubbleWrap.java 
public class BubbleWrap implements Bundling{ 
    public String bundle() { 
     return "BubbleWrap"; 
    } 
} 

//Bundling.java 
interface Bundling{ 
    public String bundle(); 
} 

//Cushioning.java 
public class Cushioning implements Bundling{ 
    //Override 
    public String bundle() { 
     return "Cushioning"; 
    } 
} 

//FGItem.java 
abstract class FGItem implements Artpiece{ 
    public Bundling bundling() { 
     Bundling b = new BubbleWrap(); 
     return b; 
    } 
    public abstract float price(); 

} 

//GlassWaare.java 
public class GlassWare extends FGItem{ 

    //Override 
    public String name() { 

     return "GlassWare"; 
    } 

    //Override 
    public float price() { 

     return 160; 
    } 

} 

//Pottery.java 
public class Pottery extends FGItem{ 

    //Override 
    public String name() { 

     return "Pottery"; 
    } 

    //Override 
    public float price() { 

     return 25; 
    } 

} 

//ArtItems.java 
import java.util.ArrayList; 
public class ArtItems implements Artpiece{ 

    float sum = 0; 
    ArrayList<Artpiece> item = new ArrayList<Artpiece>(); 


    //Override 
    public String name() { 

     return name(); 
    } 

    //Override 
    public Bundling bundling() { 

     return bundling(); 
    } 

    //Override 
    public float price() 
    { 
     return price(); 
    } 

    public float getCost() 
    { 
     for(int i=0; i<item.size(); i++) 
     { 
      Artpiece art = item.get(i); 
      sum += art.price(); 
     } 
     return sum; 

    } 

    public void addItem(Artpiece artpiece) 
    { 

     item.add(artpiece); 
    } 

    public void showItems() 
    { 
     for(int i=0; i<item.size(); i++) 
     { 
      Artpiece art = item.get(i); 
      System.out.println("Item: " + art.name() + " Packaging " + art.bundling().bundle() + ", Price: " + art.price()); 
     } 

    } 



} 

//Dispatcher.java 

public class Dispatcher { 
     public ArtItems prepareFGitem(){ 
     ArtItems artitems = new ArtItems(); 
     artitems.addItem(new Pottery()); 
     artitems.addItem(new GlassWare()); 
      return artitems; 
     } 


} 

//Salesorder.java This is the driver class 
public class Salesorder { 
    public static void main(String[] args) { 
    Dispatcher dispatcher = new Dispatcher(); 
     ArtItems FGartitem = dispatcher.prepareFGitem(); 

     System.out.println("Fragile Items"); 
     FGartitem.showItems(); 
     System.out.println("Total Cost: " +FGartitem.getCost()); 


    } 
} 
0

爲什麼ArtItems實現Artpiece?從邏輯上講,你所處理的每件物品都應該實施ArtPiece,而不是ArtItems,在那裏威脅一系列物品。這就像說一個倉庫實現一個架子。

添加到數組列表時,您必須添加一個Artpiece類型的項目(或實現Artpiece的類),您在add方法內部創建了一個方法,該方法實際上並不工作,artpiece.add(price ())會更有意義,但如果價格()實際上返回了一件藝術品,那麼它仍然行不通,這在邏輯上不應該。

相關問題