有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用arraylist中先前定义的类

我正在编写一个java库存问题的补充,该问题使用arraylist编写方法来添加、搜索库存中的项目

我正在使用另一个名为InventoryItem的类,它有sku、itemName、price和stock的变量

我想知道,在编写添加项的方法时,使用一个明确定义的类是否正确

import java.util.*;

public class Warehouse {

      private ArrayList<InventoryItem> inventory = new ArrayList<InventoryItem>();

      public static void addItem(InventoryItem i ) 

          inventory.add(i);

      }

      public static void main(String [] args) {

           addItem();    

      }
}

这是InventoryItem类

public class InventoryItem {

   private int sku;
   private String itemName;
   private double price;
   private int stock;



   public InventoryItem (int sku, String itemName, double price, int stock) {

   this.sku = sku;      
   this.itemName = itemName;
   this.price = price; 
   this.stock = stock;

}

   public int getSku() {

      return sku;

   }


   public String getitemName () {

      return itemName;

   }

   public void setPrice (double price) {

      this.price = price;

   }   

   public double getPrice () {

      return price;

   }

   public void setStock(int stock) {

      this.stock = stock;

   }


   public int getStock() {

      return stock;

   }
    @Override
   public String toString() {

      return String.format("[%d ,%s ,%1.2f ,%d]", sku, itemName, price, stock);

   }

   public static void main(String[] args) {
      InventoryItem itemName = new InventoryItem(1, "asdf", 2.4, 5);
      System.out.println(itemName);

   }

}

共 (2) 个答案

  1. # 1 楼答案

    你说得对。调用addItem()方法时,需要传入InventoryItem对象。所以也许更像是:

    double sku = 111;
    String itemName = "someItem";
    double price = 2.99;
    int stock = 1;
    
    InventoryItem inventoryItem = new InventoryItem(sku, itemName, price, stock);
    addItem(inventoryItem);
    

    当然,您需要确保在InventoryItem类中有一个构造函数,它接受您需要的参数

    所以,根据你的InventoryItem类,以及下面Bohemian的额外提示,它看起来是这样的:

         import java.util.ArrayList;
         import java.util.List;
    
        public class Warehouse {
            private List<InventoryItem> inventory = new ArrayList<InventoryItem>();
    
            public void addItem(InventoryItem i) {
            inventory.add(i);
        }
    
        public static void main(String [] args) {
            // create a Warehouse instance
            Warehouse warehouse = new Warehouse();
            // create an InventoryItem instance 
    
            int sku = 111;
            String itemName = "someItem";
            double price = 2.99;
            int stock = 1;
    
            InventoryItem i = new InventoryItem(sku, itemName, price, stock);
            // add the InventoryItem to the Warehouse
            warehouse.addItem(i);    
        }
    }
    
  2. # 2 楼答案

    你的addItem()方法的主要问题是它是static,所以它无法访问warehouse列表,这是一个只能从实例访问的实例变量

    要解决此(及其他)问题,请尝试以下方法:

    public class Warehouse {
        private List<InventoryItem> inventory = new ArrayList<InventoryItem>();
    
        public void addItem(InventoryItem i) 
            inventory.add(i);
        }
    
        public static void main(String [] args) {
            // create a Warehouse instance
            Warehouse warehouse = new Warehouse();
            // create an InventoryItem instance 
            InventoryItem i = new InventoryItem(sku, itemName, price, stock);
            // add the InventoryItem to the Warehouse
            warehouse.addItem(i);    
        }
    }