如何将新对象添加到ArrayList?

Dan*_* S. 1 java add arraylist object

我正在尝试将新对象添加到ArrayList.每个Item对象都有3个属性:

  1. itemNum
  2. 信息
  3. 成本

我也有3个班:

  1. Item类定义存储在目录中的单个项目.
  2. Catalog类维护Item对象的列表.
  3. 客户端类w/main方法.

我有集合并获取Item类,我在Catalog中有ArrayList.在客户端中,我将有选项来添加,删除或编辑对象.如何正确地将新Item对象添加到ArrayList?

我得到Item类编译正常,但Catalog和Client类没有编译.这是我在Catalog类中遇到的错误:

Catalog.java:35: error: no suitable method found for add(int,String,double)listOfObjects.add(newItemId, newDescription, newCost); 
 method ArrayList.add(int,Item) is not applicable
 (actual and formal argument lists differ in length)
 method ArrayList.add(Item) is not applicable
(actual and formal argument lists differ in length)
Run Code Online (Sandbox Code Playgroud)

下面是Item类的代码

 Public class Item 
 {
  private int itemNum;
  private String info;
  private double cost;   

  public Item()
  {   //start constructor
     itemNum = 0;   //default values
     info = "x";
     cost = 0;
  }   //end constructor

  public CatalogItem(int newItemNum, String newInfo, double newCost)
  {   //start overload constructor
     this.itemNum = newItemNum;
     this.info = newInfo;
     this.cost = newCost;
  }   //end overload constructor
Run Code Online (Sandbox Code Playgroud)

以下是itemNum的set/gets

     public int getItemNum()
     {   //start itemNum accessor
     return itemNum;
     }   //end getItemNum

  public void setItemNum(int newItemNum)
  {   //start itemNum mutator
     this.itemNum = newItemNum;
  }   //end setItemNum
 }   //end Item class
Run Code Online (Sandbox Code Playgroud)

//下面是我的目录类

 import java.util.*;

    public class Catalog
     {   //start class
      private ArrayList<CatalogItem> listOfObjects = new ArrayList<CatalogItem>(100);   //creates ArrayList
     Item newItem = new Item(newItemNum, newInfo, newCost);   //instantiates Item class

  /*
  public Catalog()
  {   //start constructor

  }   //end constructor     
  */

 public void add(CatalogItem newItem)   //method adds a new Item object to the array list
  {   //start add
     listOfObjects.add(newItem);

  }   //end add  

  public void add(int itemNum, String info, double cost)   //accepts parameters from main method to add to new object
  {   //start add
     int newItemNum = itemNum;
     String newInfo = info;
     double newCost = cost;

    newItem.setItemNum(newItemNum);
    newItem.setInfo(newInfo);
     newItem.setCost(newCost);

     listOfObjects.add(newItemNum, newInfo, newCost);

  }   //end add
 }     //end class
Run Code Online (Sandbox Code Playgroud)

以下是客户类.它接收用户关于itemNum,info和cost的输入

 import java.util.*;   //allows use of Scanner class

public class Client
{   //start client class

  public static void main(String[] args)
  {   //start main
     Catalog serv = new Catalog();   //creates instance of Catalog class
     Scanner scan = new Scanner(System.in);   //creates instance of Scanner class called scan

  public void add(int itemNum, String info, double cost)   //accepts parameters from main method to add to new object
  {   //start add
     int newItemNum = itemNum;
     String newInfo = info;
     double newCost = cost;

     newItem.setItemNum(newItemNum);
     newItem.setInfo(newInfo);
     newItem.setCost(newCost);

     listOfObjects.add(newItemNum, newInfo, newCost);   //adds the object to the ArrayList

  }   //end add
 }
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

ang*_*rro 5

你有一些错误......

在您的类目录中,此行不正确:

listOfObjects.add(newItemNum, newInfo, newCost);   //adds the object to the ArrayList
Run Code Online (Sandbox Code Playgroud)

你必须这样做:

CatalogItem cat = new CatalogItem(newItemNum, newInfo, newCost);
listOfObjects.add(cat);   //adds the object to the ArrayList
Run Code Online (Sandbox Code Playgroud)

在您的类Client中,您没有引用newItem和listOfObjects,因此您不能在该类中使用它们.如果要从Client的main方法向listOfObjects添加元素,可以执行以下操作:

public class Client {
    public static void main(String[] args) {   //start main
        Catalog serv = new Catalog();
        ......
        serv.add(1, "", 1.0d);
    }
}
Run Code Online (Sandbox Code Playgroud)