【问题标题】:Don't understand how to utilize ArrayList with a collection不明白如何将 ArrayList 与集合一起使用
【发布时间】:2021-12-20 21:37:11
【问题描述】:

对于我当前的任务,我必须创建一个程序,该程序可以制作比萨饼、选择配料、计算订单总数并将订单导出到 txt 文件。所有这些都是在 JavaFX 中使用多个控制器类完成的。

package application;

import java.util.ArrayList;

// You can add additional methods for help.
public abstract class Pizza // Abstract is used to make specific methods that will be used by other classes that are related to pizza.
{
    protected ArrayList<Topping> toppings = new ArrayList<Topping>(); // How the heck do I use this???
    protected Size size; // Enum Class
    public abstract double price();
}

上面的代码是我的披萨课。我必须使用包含的参数,但如果需要,我可以添加更多方法。我遇到的问题是使用必须具有“Topping”项目集合的 ArrayList。这是我们第一次使用 ArrayList(他们从来没有教过我们如何正确使用它,这真的很糟糕)所以我用浇头列表创建了一个枚举类。

package application;

public enum Topping 
{
    Pepperoni, Sausage, Chicken, Beef, Ham, GreenPepper, Onion, Mushroom, Pinapple, BlackOlives;
}

但现在我不知道我应该如何使用 ArrayList。例如,对于特定类型的比萨(豪华、夏威夷、意大利辣香肠),我的比萨类具有继承类。下面的代码是它现在的样子的一个例子。我希望豪华比萨饼的配料从鸡肉、蘑菇、青椒、香肠和洋葱开始。然后用户将能够在主程序中添加或删除浇头。

package application;

public class PizzaDeluxe extends Pizza
{
    @Override
    public double price() 
    {
        return 0;
    }
}

如何让豪华比萨课从某些配料开始?在我这样做之后,我如何能够删除或添加某些浇头?最后,我如何获得披萨上的配料信息列表?

【问题讨论】:

  • 声明应该是List&lt;Topping&gt;,因为你应该总是program to the interface, not the implementation。您说他们从未教过您如何正确使用它,但是您是否查看过 ListArrayList 的文档?这将是一个很好的起点。
  • 另外,对于学校项目而言,这可能并不重要,但 double is not suitable 代表金钱。最好将整数美分存储在intlong 中,或者改用BigDecimal。但您可以稍后再担心。
  • 如果你不知道如何在学校项目的代码中使用某些东西,也许你应该先问问你的导师/老师?
  • 请保持标签的重点——这是基本的java,与fx、fxml或css没有任何关系

标签: java class


【解决方案1】:

对于您的Pizza 类,您可能需要创建addToppingremoveTopping 方法。要列出所有浇头,您可能需要创建一个 getter:

public abstract class Pizza {
    protected List<Topping> toppings = new ArrayList<>();
    protected Size size; // Enum Class
    public abstract double price();

    public void addTopping(Topping topping) {
        toppings.add(topping);
    }

    public void removeTopping(Topping topping) {
        toppings.remove(topping);
    }

    public List<Topping> getToppings() {
        return toppings;
    }
}

为了用特定的浇头初始化PizzaDeluxe,我们可以在构造函数中使用addAll来完成这个:

public class PizzaDeluxe extends Pizza {
    public PizzaDeluxe() {
        toppings.addAll(Arrays.asList(Topping.Chicken, Topping.Mushroom, Topping.GreenPepper, Topping.Sausage, Topping.Onion));
    }

...
}

【讨论】:

  • 附注一下,List&lt;Topping&gt; getToppings() 应该返回一个新的List 而不是存储在Pizza 中的原始List,否则可以在不使用正确的方法。
  • 我的意思是,如果您希望它是不可修改的Collections.unmodifiableList(toppings),并让消费者随心所欲地使用它。但我觉得这个问题有点离题了。
  • 非常感谢您提供的信息!我一直在努力尝试让某些东西发挥作用,这让我更容易理解。
  • @ErvinSzilagyi,是的,它离题了,它只是对通常是 Java 应用程序错误来源的东西的一个旁注;)
猜你喜欢
  • 2017-08-31
  • 2019-04-13
  • 2021-03-30
  • 2021-07-28
  • 2012-07-29
  • 1970-01-01
  • 2010-12-03
  • 2020-08-21
  • 1970-01-01
相关资源
最近更新 更多