我从这段代码中得到一个空异常错误,我不确定是什么原因造成的。数组 itemcatalog 已填充 i = 0 到 8。我是 java 新手,因此将不胜感激。错误消息指向 while 语句的行。谢谢
public class ItemCatalog {
   private static ItemCatalog instance = new ItemCatalog(); 
   private Item itemCatalog[] = new Item[9];
   private ItemCatalog(){
   };
   public static synchronized ItemCatalog getInstance() {
   return instance;
   }
   public void populateCatalog()
   {  
      itemCatalog[0] = new Item("bb","Baked Beans",new BigDecimal("0.35"));
      itemCatalog[1] = new Item("cf","Cornflakes",new BigDecimal("1.00"));
      itemCatalog[2] = new Item("s0","Sugar",new BigDecimal("0.50"));
      itemCatalog[3] = new Item("tb","Tea Bags",new BigDecimal("1.15"));
      itemCatalog[4] = new Item("ic","Instant Coffee",new BigDecimal("2.50"));
      itemCatalog[5] = new Item("b0","Bread",new BigDecimal("0.50"));
      itemCatalog[6] = new Item("s0","Sausages",new BigDecimal("1.30"));
      itemCatalog[7] = new Item("e0","Eggs",new BigDecimal("0.75"));
      itemCatalog[8] = new Item("m0","Milk",new BigDecimal("0.65"));
   }
   public BigDecimal getPrice(String itemCode)
   {  
      int i = 0;
      while (!itemCode.equals(itemCatalog[i].getItemCode()))
      {
        i++;
      }
      BigDecimal itemPrice = itemCatalog[i].getItemprice();
   return itemPrice;
   }
}
我解决了这个问题。我在给出空异常错误的主类中填充目录。我改为在 jframe 中实例化它并且它可以工作。下面的代码解决了这个问题,但这是填充目录的最佳位置吗?
private void saleButtonActionPerformed(java.awt.event.ActionEvent evt) {                                           
        String itemCode = this.itemCodeinput.getText();
        int itemQuantity =Integer.parseInt(this.itemQuantityinput.getText());
        ItemCatalog catalog = ItemCatalog.getInstance();
        catalog.populateCatalog(); 
        BigDecimal price = catalog.getPrice(itemCode);
        itemCostoutput.setText(price.toString());
}