Saya telah mencoba membuat metode untuk membuat untuk menambahkan produk ke dalam ArrayList sambil memeriksa apakah sudah ada di sana. Tapi entah bagaimana loop tidak menambahkan produk ke ArrayList dan saya tidak tahu mengapa.

public class Shop1 {

    private String shopName;
    private ArrayList<Product> products;
    private ArrayList<Customer> customers;
    private ArrayList<Transaction> transactions;

    public Shop1(String shopName)
    {
        this.shopName = shopName;
        products = new ArrayList<Product>();
        customers = new ArrayList<Customer>();
        transactions = new ArrayList<Transaction>();
    }

    //addProduct
    public void addProduct(String product_id,String product_name,int product_price,int product_amnt)
    {
        for(Product p:products)
        {
            if(p.getproduct_name().equals(product_name)) 
            {
                int amnt;
                amnt = p.getproduct_stockamnt()+product_amnt;
                p.setproduct_stockamnt(amnt);
            }
            else 
            {
                Product pr = new Product(product_id,product_name,product_price,product_amnt);
                products.add(pr);
            }
        }
    }
0
Rujiwat Pithaksiripan 16 Januari 2021, 19:34

3 jawaban

Jawaban Terbaik

Anda mencoba menambahkan produk sambil mengulang products. Jadi jika products kosong, tidak akan terjadi apa-apa.

Anda ingin mengulang produk sepenuhnya, dan setelah itu mungkin menambahkan produk.

Sesuatu seperti ini, misalnya:

public void addProduct(String product_id, String product_name, int product_price, int product_amnt)
{
    for (Product p: products)
    {
        if (p.getproduct_name().equals(product_name)) 
        {
            int amnt = p.getproduct_stockamnt() + product_amnt;
            p.setproduct_stockamnt(amnt);
            return; // found so no need to go any further
        }
    }
    // We did not find it, so add a new product:
    Product pr = new Product(product_id,product_name,product_price,product_amnt);
    products.add(pr);
}
1
khelwood 16 Januari 2021, 16:46

Tidak tahu tentang alasan pastinya tetapi coba pendekatan berbasis indeks.

Gunakan indeks dengan for loop daripada Product p.

Tidak yakin tetapi hal-hal seperti itu terutama terjadi karena masalah terkait ruang lingkup.

Ambil cuplikan ini misalnya:

int a = 3;
{
    int a = 5;
} 
System.out.println(a); // Results in 3

Masalah seperti itu terutama datang memiliki ruang lingkup lokal sehingga saat keluar dari loop, itu me-reset ke hal yang asli.

Jadi, coba hal-hal dengan indeks menggunakan ukuran, yang akan memberi Anda output yang diharapkan karena variabel int akan dihancurkan setelah ruang lingkup tetapi perubahan dilakukan di tempat yang diharapkan.

-1
Het Daftary 16 Januari 2021, 16:49

Ada satu masalah utama dengan metode addProduct().

Penggunaan loop untuk-setiap adalah metode iterasi di mana Anda membuat variabel sementara baru tempat Anda menyimpan elemen saat ini yang memiliki pointer. Setiap iterasi, pointernya bertambah (bertambah 1) sehingga di setiap iterasi akan ada elemen baru dalam variabel sementara. Karena itu dalam kode Anda di baris

amnt = p.getproduct_stockamnt()+product_amnt;
p.setproduct_stockamnt(amnt);

Anda akhirnya menyetel jumlah stok variabel sementara p ke amnt. Iterasi berikutnya yang akan dilalui loop akan menghapus hasil terakhir dan karenanya, perubahan Anda tidak akan terlihat.

Menggunakan loop for-index akan memungkinkan perubahan ke ArrayList aktual dan bukan variabel sementara

Menggunakan perulangan indeks-for

for(int i = 0;i<products.size();i++)
{
 Product currentProduct = products.get(i);
//similar to the for-each loop as there is a temporary variable
 if(currentProduct.getproduct_name().equals(product_name))
 {
   int amnt = currentProduct.getproduct_stockamt()+product_amnt;
   //however stock is being added to the original location in the list
   products.get(i).setproduct_stockamnt(amnt);
 }
 else
 {
   Product pr = new Product(product_id,product_name,product_price,product_amnt);
   products.add(pr);
 }
}
0
Birat Koirala 16 Januari 2021, 17:43