【问题标题】:Implementation and adding items to ArrayList from methods从方法实现并将项目添加到 ArrayList
【发布时间】:2013-07-08 15:08:19
【问题描述】:

让我粘贴我的整个问题。请考虑一下我的英语有点弱。

问题:根据收到的销售订单进行调度的调度系统 根据订购的物品,需要适当包装的物品。假设这家商店正在销售富有艺术气息的古董。这些艺术品 可以归类为“易碎”物品。易碎物品有两种 在商店出售的是“陶器”和“玻璃器皿”。每个项目都需要与适当的捆绑 包。捆绑有两种类型,“BubbleWrap”或“Cushioning”。对于易碎物品 泡沫包装完成并使用非易碎物品“缓冲”。 然后,您需要创建一个具有 ArrayList 艺术品的 ARTITEM 类和一个 Dispatcher 来打包不同类型的 Artitem 对象,这些对象可以被识别为脆弱的。 Salesorder 是我们的演示类,它将使用 Dispatcher 打包一个项目?

我有一个接口 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()); 
   } 
} 

【问题讨论】:

  • 您的代码有错误。应该删除“无效价格”。另外,更改您的命名。是艺术品,不是艺术品。您想将艺术​​品添加到艺术品列表中,例如 artpieces.add(new Artpiece());
  • 您在哪里定义了您使用的添加 artpiece.add(void price()) ?你定义的价格函数也返回一个浮点数,你为什么用 void 调用它??
  • 另外,添加东西到列表的位置不正确。您只能在另一个方法中或在构造函数或初始化程序块中调用添加项目的方法。我建议用一种方法来做,这对你来说可能是最简单的。还要遵守使用小写变量和大写类的约定。你的“FGartitem”应该叫做“artItems”,或者类似的名字。
  • 在 addItem 方法中,您需要将项目添加到列表中,例如“artpiece.add(pottery)”。但是,这可能不起作用,因为您的列表仅接受 Artpiece 类,因此您也需要更改它。

标签: java interface arraylist implementation abstract


【解决方案1】:

ArtItems 为什么要实现 Artpiece?从逻辑上讲,您处理的每个项目都应该实现 ArtPiece,而不是 ArtItems,您会在其中威胁到项目集合。这就像说仓库实现了货架。

添加到arraylist时,必须添加Artpiece类型的项目(或实现Artpiece的类),您在add方法中创建了一个方法,这实际上不起作用,artpiece.add(price( )) 会更有意义,但除非 price() 实际上返回一件艺术品,否则它仍然无法工作,这在逻辑上不应该。

【讨论】:

    【解决方案2】:

    感谢大家的贡献。我自己做了一些研究后自己解决了这个问题:你可以参考我发布的答案,它是 100% 工作的。编码如下:

    //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()); 
    
    
       } 
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多