【发布时间】:2020-04-09 09:01:08
【问题描述】:
我尝试使用使用几个循环的方法添加一个表示食品的对象。 这是方法:
public boolean addItem(FoodItem other)
{
boolean isAdded = false;
int i = 0;
while(i<_stock.length)
{
if(_stock[i]!=null)
{
if (_stock[i].equals(other))
{
_stock[i].setQuantity(_stock[i].getQuantity()+other.getQuantity());
System.out.println(_stock[i]+"equals");
isAdded = true;
i++;
break;
}
else if (_stock[i].getName().equals(other.getName())
&& _stock[i].getCatalogueNumber()==other.getCatalogueNumber()
&& _stock[i].getExpiryDate().equals(other.getExpiryDate()) != true)
{
for(int x=i ; x<_stock.length; x++)
{
if (_stock[x] == null)
{
_stock[x] = new FoodItem(_stock[x-1]);
System.out.println(_stock[i]+"x-1");
break;
}
}
_stock[i] = new FoodItem(other);
System.out.println(_stock[i]+"expiery dates");
isAdded = true;
break;
}
else if (_stock[i].getName().equals(other.getName())
&& _stock[i].getCatalogueNumber()==other.getCatalogueNumber()
&& _stock[i].getProductionDate().equals(other.getProductionDate()) != true)
{
for(int x=i ; x<_stock.length; x++)
{
if (_stock[x] == null)
{
_stock[x] = new FoodItem(_stock[x-1]);
System.out.println(_stock[i]+"x-1");
break;
}
}
_stock[i] = new FoodItem(other);
System.out.println(_stock[i]+"production dates");
isAdded = true;
i++;
break;
}
else
{
System.out.println(_stock[i]);
System.out.println(_stock[i]+"i++");
i++;
break;
}
}
else
{
_stock[i] = new FoodItem(other);
System.out.println(_stock[i]+"else");
isAdded = true;
i++;
break;
}
}
return isAdded;
}
但是当我尝试添加对象时,我得到一个奇怪的输出,我在这里调用方法:
Date t1 = new Date(1,1,2000);
Date t2 = new Date(1,1,2001);
Date t3 = new Date(1,1,2002);
FoodItem f1 = new FoodItem("Milk", 1111, 12, t1, t2, 7, 10, 5);
FoodItem f2 = new FoodItem("Milk", 1111, 12, t1, t2, 7, 10, 5);
FoodItem f3 = new FoodItem("PopCorn", 3333, 2, t1, t3, 6, 10, 12);
Stock s = new Stock();
s.addItem(f1);
s.addItem(f2);
s.addItem(f3);
System.out.println(s._stock[0]+"added");
System.out.println();
System.out.println(s._stock[1]+"added");
System.out.println();
System.out.println(s._stock[2]+"added");
这是输出:
FoodItem: Milk _catalogueNumber: 1111 _productionDate: 01/01/2000 _expiryDate: 01/01/2001 _quantity: 12else FoodItem: Milk _catalogueNumber: 1111 _productionDate: 01/01/2000 _expiryDate: 01/01/2001 _quantity: 24equals FoodItem: 牛奶 _catalogueNumber: 1111 _productionDate: 01/01/2000 _expiryDate: 01/01/2001 _quantity: 24 FoodItem:牛奶 _catalogueNumber:1111 _productionDate:01/01/2000 _expiryDate:01/01/2001 _quantity:24i++ FoodItem: Milk _catalogueNumber: 1111 _productionDate: 01/01/2000 _expiryDate: 01/01/2001 _quantity: 24add
空添加
空添加
当我将添加的项目更改为仅不同的项目时
FoodItem f1 = new FoodItem("Milk", 1111, 12, t1, t2, 7, 10, 5);
FoodItem f2 = new FoodItem("Cola", 1111, 12, t1, t2, 7, 10, 5);
FoodItem f3 = new FoodItem("PopCorn", 3333, 2, t1, t3, 6, 10, 12);
输出是:
FoodItem: Milk _catalogueNumber: 1111 _productionDate: 01/01/2000 _expiryDate: 01/01/2001 _quantity: 12else FoodItem:牛奶 _catalogueNumber:1111 _productionDate:01/01/2000 _expiryDate:01/01/2001 _quantity:12 FoodItem:牛奶 _catalogueNumber:1111 _productionDate:01/01/2000 _expiryDate:01/01/2001 _quantity:12i++ FoodItem:牛奶 _catalogueNumber:1111 _productionDate:01/01/2000 _expiryDate:01/01/2001 _quantity:12 FoodItem:牛奶 _catalogueNumber:1111 _productionDate:01/01/2000 _expiryDate:01/01/2001 _quantity:12i++ FoodItem: Milk _catalogueNumber: 1111 _productionDate: 01/01/2000 _expiryDate: 01/01/2001 _quantity: 12 added
空添加
空添加
我做错了什么?似乎它从来没有真正尝试添加任何其他项目,除了第一个项目......
【问题讨论】:
-
这是很多用于将对象添加到数组的代码,除了第一个
if我不太了解。您在应该添加对象的方法中创建新对象真的很奇怪。您可能想要重构该方法以使其更易于理解,尤其是对您自己而言。也许还值得研究更高级的集合类,如 ArrayList 或 HashMap。 -
我必须避免别名...这是作业的一部分,所以我需要检查食物对象在日期上是否与另一个对象不同,如果我需要在旧对象之前添加新对象