0

私はJavaにかなり慣れていないので、答えを見つけるために現在のリソースをすべて使い果たしました。オブジェクトの最初のプロパティにアクセスして、特定の整数と一致するかどうかを確認できるかどうか疑問に思っていますか?

たとえば、製品 ID で検索して、データベース内にある製品を取得しようとしています。したがって、Product ipad = new Product(12345, "iPad", 125.0, DeptCode.COMPUTER);Product ipod = new Product(12356, "iPod", 125.0, DeptCode.ELECTRONICS);(以下にこの Product クラスを含めました) などの 2 つの製品を作成し、それらを のような Arraylist に追加した場合、List<Product> products = new ArrayList<Product>();この ArrayList をループして ID で製品を見つけるにはどうすればよいでしょうか? これは私が取り組んでいる方法です:

List<Product> products = new ArrayList<Product>();


@Override
public Product getProduct(int productId) {
    // TODO Auto-generated method stub
    for(int i=0; i<products.size(); i++){
        //if statement would go here
        //I was trying: if (Product.getId() == productId) {
        System.out.println(products.get(i));
    }
    return null;
}`

for ループに条件ステートメントを含めることができることはわかっていますが、Product クラスの getId() メソッドにアクセスして productId パラメータと比較する方法がわかりません。

 package productdb;

public class Product {
    private Integer id;
    private String name;
    private double price;
    private DeptCode dept;

    public Product(String name, double price, DeptCode code) {
        this(null, name, price, code);
    }

    public Product(Integer id, String name, double price, DeptCode code) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.dept = code;
    }

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }

    public Integer getId() {
        return id;
    }


    public void setId(Integer id) {
        this.id = id;
    }

    public DeptCode getDept() {
        return dept;
    }

    public void setDept(DeptCode dept) {
        this.dept = dept;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        String info = String.format("Product [productId:%d,  name: %s, dept: %s, price: %.2f",
                id, name, dept, price);
        return info;
    }

}

私にお知らせください

4

4 に答える 4

4

次のステートメントでは、既にProductout を取得しています。List<Product>

System.out.println(products.get(i));

これでid を取得できたので、メソッドを呼び出すだけでidProductを取得できます。getId()

if (product.get(i).getId() == productId) {
    // Return this product.
}

次のような従来のループの代わりに、強化された for ループを使用することもお勧めします。

for (Product product: products) {
    // Now you have the product. Just get the Id
    if (product.getId() == productId) {
        return product;
    }
}

また、productIdのタイプをからIntegerに変更する必要がありますint。そこにはラッパータイプは必要ありません。

于 2013-08-23T17:49:59.400 に答える
0

あなたのコメント行//I was trying: if (Product.getId() == productId)によると、あなたが倒れていた場所はProduct(大文字の P) を使用していると思います。必要なものは次のとおりです。

if (products.get(i).getId() == productId)

また、見つけた商品を返品していませんでした...

そのフォームの問題は、a) リスト内の製品を 2 回検索する必要がある (1 回は条件で、次に結果を印刷するとき - 製品を返品した場合は 3 回目)、b) null ポインターがスローされることです。お探しの製品がリストにない場合は例外です。

これは、より適切でコンパクトな方法です。

@Override
public Product getProduct(int productId)
{
  for(Product product : products)
  {
    if (productId == product.getId())
    {
      System.out.println(product.toString());
      return product;
    } 
  }
  return null;
}
于 2013-08-23T17:54:33.570 に答える