gpt4 book ai didi

java - 仅当相似项目不在列表中时才将项目添加到 ArrayList

转载 作者:行者123 更新时间:2023-11-30 10:17:16 24 4
gpt4 key购买 nike

这是 ArrayList 所基于的单独类 Product 的代码。本章让我们学习 ArrayList、Loops 和 Iterator,因此没有涵盖比这更高级的内容,也不打算用于完成练习。

public class Product
{
// An identifying number for this product.
private int id;
// The name of this product.
private String name;
// The quantity of this product in stock.
private int quantity;

/**
* Constructor for objects of class Product.
* The initial stock quantity is zero.
* @param id The product's identifying number.
* @param name The product's name.
*/
public Product(int id, String name)
{
this.id = id;
this.name = name;
quantity = 0;
}

/**
* @return The product's id.
*/
public int getID()
{
return id;
}

/**
* @return The product's name.
*/
public String getName()
{
return name;
}

/**
* @return The quantity in stock.
*/
public int getQuantity()
{
return quantity;
}

/**
* @return The id, name and quantity in stock.
*/
public String toString()
{
return id + ": " +
name +
" stock level: " + quantity;
}


public class StockManager
{
// A list of the products.
private ArrayList<Product> stock;

/**
* Initialise the stock manager.
*/
public StockManager()
{
stock = new ArrayList<>();
}

/**
* Add a product to the list.
* @param item The item to be added.
*/
public void addProduct(Product item)
{
stock.add(item);
}

项目的设置方式是在创建对象时创建一个 StockManager 对象和一些 Product 对象(为 ProductID 和 ProductName 输入参数)。然后我可以调用默认的 addProduct 方法将那些新创建的 Product 对象添加到 ArrayList。我的任务是修改 addProduct 方法,以便在已将具有相同 ID 的产品输入到列表中的情况下,新产品不会添加到列表中。

起初,我认为我可能应该使用“for each”循环并执行如下操作:

public void addProduct(Product item)
{
for(Product product : stock){
if(product.getID()!=item.getID())
stock.add(item);
}

但这并没有向列表中添加任何内容。如果我使用此方法将一个产品对象添加到列表中,然后调用一个方法来打印/查找产品,它只会返回 null 并显示未输入任何内容。

然后我想也许我应该做类似的事情

public void addProduct(Product item)
{
if(!stock.contains(item.getID()))
stock.add(item);

但这也行不通。我的教授暗示我应该使用 null 值,但我弄乱了 null 并且它永远不起作用,因为 getID 是一个整数,即使我让它工作,我也觉得我没有正确设置问题。

最佳答案

public void addProduct(Product item)
{
if(!stock.contains(item.getID()))
stock.add(item);
}

这不起作用,因为 stock 是产品列表,因此不能包含 ID(整数)。

public void addProduct(Product item)
{
for(Product product : stock){
if(product.getID() != item.getID())
stock.add(item);
}
}

这更接近于解决方案,但这不起作用,因为如果您没有库存,那么您就没有什么可以迭代的,因此永远不会添加任何东西。此外,尝试修改您正在迭代的列表无论如何都会抛出异常。

我会像这样实现它,并设置一个 boolean 标志:

public void addProduct(Product item)
{
boolean alreadyPresent = false;
for(Product product : stock){
if(product.getID() == item.getID()) {
alreadyPresent = true;
break; //an optimisation but not strictly necessary
}
}
if (!alreadyPresent) stock.add(item);
}

对于第一个产品,alreadyPresent 将保持为 false,因此将添加该产品。对于每个后续项目,该项目只会在 for-each 循环完成迭代后添加,因此不会抛出异常。

关于java - 仅当相似项目不在列表中时才将项目添加到 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49749182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com