首页 > 解决方案 > JAVA 商店程序没有输出正确的数字

问题描述

我正在为我的 OOP 类创建一个 Java 程序。该程序应该是商店界面的开始,我们将在本学期剩下的时间里建立它。每当我要添加新产品并尝试访问它的库存量时,我的程序都会显示“ Id DNE -1 ”,它只应该在调用 id 并且它不存在时打印。我不太清楚为什么它不能识别我刚刚放入的产品。以下是我使用的所有课程。我认为错误必须在我的库存类中的某个地方,但我不太确定。OOP 的任何提示或技巧也将不胜感激。干杯

public class main
{
    public static void main(String[] args)
    {
       StoreManager r3 = new StoreManager();
       Inventory r4 = new Inventory();

       r4.addNewProduct(1,"apple",1.50,50);
       System.out.println(r3.qCheck(1));
    }
}
public class StoreManager
{

    private Inventory store1 = new Inventory();
    private Product store2 =   new Product();
    static Inventory r4 = new Inventory();




    public StoreManager(){}

    public int qCheck(int id)
    {
        if (store1.getStock(id) < 0)
        {
            System.out.println("Id DNE");
            return -1;
        } else
        {
            return store1.getStock(id);
        }
    }
    public double dqcheck(int id, int desiredQuantity) {
        if (store1.getStock(id) >= desiredQuantity) {
            store1.removeStock(id, desiredQuantity);
            double cost = store2.getPrice() * desiredQuantity;
            return cost;
        }
        else {
            System.out.println("id DNE");
        }
        return -1;
    }
}
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Inventory
{

    //Var Declarations
    private int quantity;
    // FIXME: 2021-02-07  idk if im usin type right
    private Product type;
    //Hashmap for the data structure in this class using the Product is gonna be a key
    // the value is the Integer for the quantity
    private Map<Product,Integer> invt = new HashMap<>();

    //blank constructor
    public Inventory()
    {

    }

    // FIXME: 2021-02-05 Getter and setter methods not really in use
    public int getQuantity(){return quantity;}

    public Product getType(){return type;}

    /*
    Used to initialize a new product and its stock into our Hashmap
    the Quantity is the Value of our hashmap while we are using the
    Product as a whole to be the key
    no return type
     */
    public void addNewProduct(int id,String name, double price, int quantity)
    {
        Product product = new Product(name, id, price);
        invt.put(product,quantity);
    }



    /*
    Used to get the get for a given id
    compares the Id to one of the ids in the Key values to find the product
    returns an int for the amount in stock or a -1 as an error if the id doesn't exist
     */
    public int getStock(int id)
    {
        Set<Product> set = invt.keySet(); // Conversion of keys into sets
        Iterator<Product> it = set.iterator(); // the only way i could get the code to interate throughout the keys

        while (it.hasNext())//Only way i could go through the code
        {
           type = it.next();// FIXME: 2021-02-07 Idk if type is being used right here but i needed a buffer variable for it to work
            Product a = it.next();
            if (a.getId() == id)
            {
                return invt.get(type);//type is an object of Product here so we can use it as a key
            }
        }
        return -1;//representation of error ID Dne
    }

    /*
    Used to add a given Stock for a given Id
    void  doesnt return anything
    assuming inpputed id exists if Dne doesnt do anythin  or return an error
     */
    public void addStock(int id, int amountToAdd)
    {
        //Possibly make this hashmap id check into another private method and call
        Set<Product> set = invt.keySet();
        Iterator<Product> it = set.iterator();

        while (it.hasNext())
        {
            type = it.next();
            if (type.getId() == id)
            {
                invt.put(type, invt.get(type)+amountToAdd);
                return;//exit the function after the addtion is done
            }
        }
    }

    /*
    Used to remove a given amount of product from stock in reference to a given Id
    void doesnt return anythin
    assuming id exits otherwise it does nothin
     */
    public void removeStock(int id, int amountToRemove)
    {
        Set<Product> set = invt.keySet();
        Iterator<Product> it = set.iterator();

        while (it.hasNext())
        {
            type = it.next();
            if (type.getId() == id && invt.get(type) - amountToRemove  >= 0)//checks if the id exits and if there whould be enough stock to remove
            {
                invt.put(type, invt.get(type)-amountToRemove);
                return;
            }
        }
    }

    /*
    Prints all product information in reference to the id
     */
    public void getInfo(int id)
    {
        Set<Product> set = invt.keySet();
        Iterator<Product> it = set.iterator();

        while (it.hasNext())
        {
            type = it.next();
            if (type.getId() == id)
            {
                System.out.println("Name: "+type.getName());
                System.out.println("Id: "+type.getId());
                System.out.println("Price: "+type.getPrice());
                System.out.println("Quantity: "+ invt.get(type)); // FIXME: 2021-02-07  Idk if Quanitity and Id are needed here
            }
        }
    }
}
public class Product
{
    private String name;
    private int Id;
    private double price;

    public Product(String Name, int Id,double Price)
    {
        this.name = Name;
        this.Id = Id;
        this.price = Price;
    }

    public Product()
    {

    }

    //Getter Methods
    public String getName() {return name;}

    public int getId() {return Id;}

    public double getPrice() {return price;}

}

标签: javaoop

解决方案


public class main
{
    public static void main(String[] args)
    {
       StoreManager r3 = new StoreManager();

       r3.store1.addNewProduct(1,"apple",1.50,50);
       System.out.println(r3.qCheck(1));
    }
}

使用属于 StoreManager 的 Inventory 对象,这是它唯一可以访问的对象。


推荐阅读