Array中的一些项目工作正常,但其中一些没有

时间:2015-03-25 20:41:50

标签: java arrays loops

我在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);     } }

1 个答案:

答案 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 ++,它似乎是多余的,可能导致问题。

编辑,是的,我认为它导致它跳过检查所有其他索引,所以有一半的时间,如果数组中的所有内容都是唯一的,它将无法找到正确的产品代码,具体取决于它是否落在奇数或偶数指数。