【问题标题】:Add objects to array via loop通过循环将对象添加到数组
【发布时间】: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。
  • 我必须避免别名...这是作业的一部分,所以我需要检查食物对象在日期上是否与另一个对象不同,如果我需要在旧对象之前添加新对象

标签: java arrays loops oop


【解决方案1】:

使用此代码肯定有很多问题需要解决以使其更具可读性/效率,但是我相信您的直接问题是由于您使用了break 语句。 Break 将完全退出循环,我相信您正在寻找的是 continue 语句。这将退出当前迭代,然后再次运行循环(假设条件仍然成立)。

【讨论】:

    猜你喜欢
    • 2021-07-01
    • 2012-10-29
    • 2023-03-26
    • 2017-06-11
    • 2018-05-19
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 2021-03-30
    相关资源
    最近更新 更多