我有Kitchen
,Product
中的每个Kitchen
都有一个到期日,
这是在创建后初始化x
天
x = for wine 3 years
for cheese 10 days
for eggs 2 days
询问应该来自Kitchen
- 厨房中的哪个产品首先到期?
请有人准备帮我实施或给我一个指导方针吗?我只是进入Java编程世界的6周,挑战自己。
答案 0 :(得分:7)
最合适的数据结构是PriorityQueue
,其Comparator
类按到期日排序Product
个对象。
如果你想要一个更通用的类,那么TreeSet
(具有相同的比较器类)将完成这项工作。 (但是有一个障碍。你的比较器需要一个打破平局,以便两个具有相同失效日期的Product
个对象不被视为相等。如果你不这样做,那么{{1对象将被视为副本,而不是添加到集合中。)
答案 1 :(得分:0)
您可以通过几种方式完成此操作,但最简单的方法是
1)Kitchen
类可以列出Products
每个产品的有效期(天),您需要购买/制造日期。
2)向产品添加辅助方法,将产品/生产日期按到期时间滚动。
3)在您的产品上实施可比较的产品,您可以获得有序列表
您可以找到有关如何实施可比较here
的示例编辑
如果您想要的不只是到期订单;考虑使用Visitor pattern以最少的数量来检索产品等其他信息。
答案 2 :(得分:0)
就像你自己解释一样 -
产品类 -
class Product {
private int daysTillExpiration = 0;
public int getDaysTillExpiration() {
return daysTillExpiration;
}
public void setDaysTillExpiration(int daysTillExpiration) {
this.daysTillExpiration = daysTillExpiration;
}
}
厨房课 -
class Kitchen {
private ArrayList<Product> products;
public Product inquire() {
int min = products.get(0).getDaysTillExpiration();
Product res = products.get(0);
for(Product prod : products) {
if(prod.getDaysTillExpiration() < min) {
min = prod.getDaysTillExpiration();
res = prod;
}
}
return res;
}
}
答案 3 :(得分:0)
我假设您正在做的是创建一个厨房对象,然后您正在创建食物并将它们添加到您已创建的厨房对象中。
将它们添加到您的厨房&#34; part是您可以使用集合来存储数据的地方。
List<Product> list = new ArrayList<Product>();
Product只是一个界面,允许您轻松地将项目添加到集合中,然后您可以获取集合并迭代元素。
如果您不了解其中任何一项,谷歌为何/如何使用数组列表,请查看泛型(https://docs.oracle.com/javase/tutorial/java/generics/why.html),然后Google如何从类中获取对象(来自您的ArrayList)厨房类),然后谷歌如何迭代ArrayList。