我在main方法中创建了一个Array。然后将其复制到另一个类中的数组中。然后添加该方法的所有必需信息,并尝试使用产品的所有3个代码(Aa / 1234,Bb / 1234,Cc / 1234)。奇怪的是,第1和第3不会抛出异常,但第2次会抛出异常。请说明出了什么问题。感谢。
try
{
Product product1 = new Product("Aa/1234", 20);
Product product2 = new Product("Bb/1234", 30);
Product product3 = new Product("Cc/1234", 40);
Product [] productRange = {product1, product2, product3};
ElectronicsEquipmentSupplier management =
new ElectronicsEquipmentSupplier(1,12,productRange);
System.arraycopy(productRange, 0, management.getProductRange(), 0,
productRange.length);
EducationalInstitutionDetails newInstitution =
new EducationalInstitutionDetails("ESE-1234",
"SE", myAddress, 1000, "UEA");
management.addNewCustomer(newInstitution);
management.addNewPurchaseOrder("21/01/12", "ESE-1234", "Bb/1234", 50);
}
catch(Exception e)
{
System.out.println(e);
}
方法:
public void addNewPurchaseOrder(String dateStr, String customerID,
String productCode, int qty) throws IncorrectPurchaseOrderException
{
Product foundProduct = null;
for(int i = 0; i < productRange.length; i++)
{
if(productRange[i].getProductCode().equals(productCode))
{
foundProduct = productRange[i];
break;
}
else
i++;
}
if(foundProduct == null)
throw new IncorrectPurchaseOrderException("Product code is not in"
+ " the product range!");
如果我在同一个方法中使用boolean,那么另一件事。同样的问题,那里有什么问题?
int i = 0;
boolean match = productRange[i].getProductCode().equals(productCode);
while(i < productRange.length)
{
if(match)
foundProduct = productRange[i];
break;
else
i++;
}
if(!match)
throw new IncorrectPurchaseOrderException("Product code is not in"
+ " the product range!");
谢谢!
例外:
public class IncorrectPurchaseOrderException extends Exception
{ public IncorrectPurchaseOrderException(String wrongOrder) { 超级(wrongOrder); } }
答案 0 :(得分:4)
不确定是不是这样,但对我来说看起来很可疑:
for(int i = 0; i < productRange.length; i++)
{
if(productRange[i].getProductCode().equals(productCode))
{
foundProduct = productRange[i];
break;
}
else
i++;
}
基本上每次你经历for循环,如果它不匹配你的增量我两次。一旦进入
行 for(int i = 0; i < productRange.length; i++)
然后另一次如果它没有被识别为具有产品代码。尝试删除else i ++,它似乎是多余的,可能导致问题。
编辑,是的,我认为它导致它跳过检查所有其他索引,所以有一半的时间,如果数组中的所有内容都是唯一的,它将无法找到正确的产品代码,具体取决于它是否落在奇数或偶数指数。