所以我做了一些作业,其中有班FoodItem
和班Stock
。在“股票”类中,有一个FoodItem
(_stock
)数组和该数组中当前位置的整数(_noOfFoodItems
)。
其中一项任务是找到数组中最昂贵的商品(FoodItem
的类属性之一是int _price
)。另一条指令是,如果数组为空,则该方法应返回null
。我已经写了每个属性get
和set
方法。
起初,在我看来,就像其他任何“在数组中找到最大的项目”一样,但是由于某种原因,我似乎对此感到困惑。到目前为止,这是我得出的结论:
public FoodItem mostExpensive() {
if (_noOfFoodItems == 0) {
return null;
}
FoodItem mostExpensiveFoodItem = _stock[0];
for (int i = 0 ; i< _noOfFoodItems; i++) {
if (_stock[i].getPrice() > mostExpensiveFoodItem.getPrice()) {
mostExpensiveFoodItem = new FoodItem(_stock[i]);
}
}
return mostExpensiveFoodItem;
}
我真的不知道出了什么问题。大学告诉我们使用的IDE中没有调试功能,并且代码对我来说似乎很好。
我已经对其进行了测试,该方法返回了第一项而不是最昂贵的项。
你能告诉我我在做什么错吗? 如果您认为错误与代码的其他部分有关,请告诉我要添加哪一部分。
提前谢谢!
修改
该方法中使用的导体如下:
public FoodItem(FoodItem otherFoodItem)
{
this._name = otherFoodItem.getName();
this._catalogueNumber = otherFoodItem.getCatalogueNumber();
this._quantity = otherFoodItem.getQuantity();
this._prodactionDate = otherFoodItem.getProdactionDate();
this._expiryDate = otherFoodItem.getExpiryDate();
this._minTemperature = otherFoodItem.getMinTemperature();
this._maxTemperature = otherFoodItem.getMaxTemperature();
}
我的测试主要对象:
public static void Main (String[] Args)
{
Stock s = new Stock();
s.addItem(new FoodItem ("milk", 1111, 5, new Date (30, 5, 2003), new Date (31, 5, 2003), -16, 22, 17 ));
s.addItem(new FoodItem ("milk", 1111, 3, new Date (30, 5, 2003), new Date (31, 5, 2003), -16, 22, 17 ));
s.addItem(new FoodItem ("bread", 1112, 2, new Date (7, 6, 2001), new Date (13, 6, 2002), -7, 1, 13 ));
s.addItem(new FoodItem ("corn", 1113, 1, new Date (30, 5, 2001), new Date (30, 5, 2000), -16, 22, 18 ));
s.addItem(new FoodItem ("soup", 1111, 5, new Date (30, 5, 2003), new Date (31, 5, 2003), -16, 22, 17 ));
s.addItem(new FoodItem ("hot dog", 1114, 201, new Date (30, 5, 2007), new Date (31, 5, 2003), 7, 5, 1 ));
System.out.println(s.mostExpensive().getName());
}
“常规”常量:
public FoodItem (String name, long catalogueNumber, int quantity, Date prodactionDate, Date expiryDate, int minTemperature, int maxTemperature, int price)
{
this._name = name;
this._catalogueNumber = catalogueNumber;
this._quantity = quantity;
this._price = price;
if(prodactionDate.before(expiryDate))
this._expiryDate = prodactionDate.tomorrow();
else
this._expiryDate = expiryDate;
if(minTemperature > maxTemperature)
{
this._minTemperature = maxTemperature;
this._maxTemperature = minTemperature;
}
else
{
this._minTemperature = minTemperature;
this._maxTemperature = maxTemperature;
}
}
答案 0 :(得分:1)
当库存中的下一个商品价格更高时,您正在创建一个新的FoodItem,但是您想使mostExpensiveFoodItem成为库存中的下一个商品。
更改:
mostExpensiveFoodItem = new FoodItem(_stock[i]);
到
mostExpensiveFoodItem = _stock[i];
如果这不是错误,我看不出代码为什么错误,所以可能在其他地方
为您的构造函数编辑
您用于复制FoodItem的构造函数不会设置价格,因此,如果您创建新的FoodItem,则价格等于null,因此第一个FoodItem始终具有最高价格,因为这是您定期创建的唯一商品。
更改您的构造函数:
public FoodItem(FoodItem otherFoodItem)
{
this._name = otherFoodItem.getName();
this._catalogueNumber = otherFoodItem.getCatalogueNumber();
this._quantity = otherFoodItem.getQuantity();
this._prodactionDate = otherFoodItem.getProdactionDate();
this._expiryDate = otherFoodItem.getExpiryDate();
this._minTemperature = otherFoodItem.getMinTemperature();
this._maxTemperature = otherFoodItem.getMaxTemperature();
//ADD THIS
this._price = otherFoodItem.getPrice();
}
答案 1 :(得分:0)
int _price在您的FoodItem构造函数中丢失。因此,_stock [i] .getPrice()> mostExpensiveFoodItem.getPrice()永远不会为true,并且每次都会返回数组的第一个元素。
答案 2 :(得分:0)
我会像下面这样重写您的<div style="border: 3px dotted lightpink;display:inline-block">
<div style="border: 3px dotted lightblue;">
Normal div
</div>
<div style="width: 2500px; height: 200px; border: 3px dotted lightgray;">
Overflow div
<br>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sit amet justo donec enim diam vulputate ut. Et odio pellentesque diam volutpat commodo sed egestas egestas fringilla. Gravida neque convallis a cras semper auctor. Scelerisque fermentum dui faucibus in ornare quam. Odio euismod lacinia at quis. Est sit amet facilisis magna. Sit amet nulla facilisi morbi tempus. Id velit ut tortor pretium viverra suspendisse potenti nullam. Consequat nisl vel pretium lectus quam id. Magna fermentum iaculis eu non diam phasellus vestibulum lorem sed. Sed odio morbi quis commodo odio aenean.
</div>
</div>
,这可以帮助您自己查找问题。
mostExpensive