【问题标题】:Add an element to an array of object将元素添加到对象数组
【发布时间】:2017-01-03 15:12:09
【问题描述】:

我有一个名为receipt 的类,其中一个属性是数组item[] items;,我有一个方法addItem (string name , int quantity , double price)。我的问题是如何将这些参数添加到数组items[]?以及如何检查数量是否大于0?
代码是什么?我的问题清楚了吗?
她是我的代码:

public boolean addItem(String name, int quantity,double price){
if(quantity <= 0){
    System.out.println("Item wasnt added");
    return false;}
    else{
        item [nItem++];//here is the problem
    }
    }

【问题讨论】:

  • new Item(variable1, variable2, and_so_on) 可能会变魔术。
  • 我假设您需要创建 item 类的新实例,然后使用赋值将其添加到数组中。这两样东西都不见了。
  • 我做了 .. 我创建了一个项目类 .. 具有 3 个属性(字符串名称、int 数量、双倍价格).. 设置并获取 ..
  • 除了上述 cmets,您可能还想为数组中的新项目保留空间。 if (item.length &lt; nItems)...

标签: java arrays arrayobject


【解决方案1】:

您可以使用项目对象作为参数,而不是传输每个单独的属性。
如果你使用数组,你应该有一个变量来存储数组中添加的最后一个元素的索引。

Item 可以有一个构造函数和必需的 getter:

public class Item{

  private String name;
  private int quantity;
  private double price;

 public Item(String name, int quantity, double price){
    this.name=name;
    this.quantity=quantity;
    this.price=price;
 }

  // required getters
}

public class Receipt{
   ...
   private int lastIndexUsed; // init to zero here
   ...
   private Item[] items = ...
   ...
    public boolean addItem(Item item){
      if(item.getQuantity() <= 0){
        System.out.println("Item wasnt added");
        return false;
      }
      else{
            items[lastIndexUsed++] = item;
        }
     }
}

如何使用:

Receipt receipt = new Receipt();
receipt.addItem(new Item("itemOne", 10, 50));
receipt.addItem(new Item("itemTwo", 20, 80));

【讨论】:

  • 在 addItem() 中,当此条件为真时,您可以抛出自定义异常lastIndexUsed==MAX_SIZE-1
【解决方案2】:

或者你可以使用 ArrayList

public class Item{

  private String name;
  private int quantity;
  private double price;

  public Item(String name, int quantity, double price){
    this.name=name;
    this.quantity=quantity;
    this.price=price;
  }
}

public class Receipt{
   private ArrayList<Item> items = new ArrayList<Item>();

    public boolean addItem(Item item){
      if(item.getQuantity() <= 0){
        ...
        return false;
      }
      else{
            items.add(item);
        }
     }
}

【讨论】:

    【解决方案3】:

    我找不到直接回答您问题的答案,所以在这里。
    我会使用ArrayList&lt;Item&gt;,因为它具有您可以调用的.add() 方法。如果需要,您可以稍后使用.ToArray()(或类似的东西)将其简单地转换为数组:

    ...
    import java.util.ArrayList;
    ...
    
    ArrayList<Item> items = new ArrayList<>();
    ...
    
    public boolean addItem(String name, int quantity, double price){
        if(quantity <= 0) {
            System.out.println("Item wasnt added");
            return false;  
        }
        else {
            //System.out.println("Item was added"); //if you want
            items.add(new Item(name, quantity, price)); //Create new Item with your parameters...  
            return true;
        }
    }
    

    不确定 Java 语法是否正确,您的 IDE 会帮助您。

    【讨论】:

      【解决方案4】:

      首先你需要做两件事来确保你有一个物品。 [] 仅用于取消引用(也就是说访问内存位置而不是对数组的引用)。您需要创建一个要添加的项目。您需要做的第二件事是确保有空间。不允许访问数组未保留的内存。

      public class Receipt {
          private int nItems;
          private Item[] items;
      
          Receipt() {
              nItems = 0;
              items = new Item[10]; // Set initial size
          }
      
          /**
              Set initial size of array
          */
          Receipt(int initSize) {
              if (initSize <= 0) {
                  throw new IllegalArgumentException("initSize must be larger than 0");
              }
              nItems = 0;
              items = new Item[initSize]; // Set initial size
          }
      
          public void addItem(Item item) {
              reserve();
              items[nItems] = item;
              nItems++; // Bad experiences of incrementing while dereferencing
          }
      
          /**
              Make sure there is enough space in items to add an ingredient
          */
          private void reserve() {
              if (items.length == nItems) {
                  Item [] tmp = new Item[nItems*2]; // Double size if array is full.
                  for (int i=0; i<nItems; i++) { // Copy the old elements to new array
                      tmp[i] = items[i];
                  }
                  items = tmp; // Replace the old array with the new array.
              }
          }
      }
      

      【讨论】:

        【解决方案5】:
         public boolean addItem(String name, int quantity,double price)
         {
            if(quantity <= 0)
            {
             System.out.println("Item wasnt added");
             return false;
            }else{
                 //you would have to create new object before adding it to array.
                 item tempItem=new item(name,quantity,price);
                 items[nItem++]=tempItem;
                  }
         }
        

        【讨论】:

        • 我是stackoverflow的新手,还在学习。下次我会尽力而为。
        • 按下编辑按钮并做对并不难。对不起,但是-1
        猜你喜欢
        • 1970-01-01
        • 2021-08-19
        • 1970-01-01
        • 2011-08-11
        • 2015-05-02
        • 1970-01-01
        • 2023-04-01
        • 2011-10-11
        • 1970-01-01
        相关资源
        最近更新 更多