1

新しいオブジェクトを ArrayList に追加しようとしています。各 Item オブジェクトには 3 つの属性があります。

  1. アイテム番号
  2. 情報
  3. 料金

私も3つのクラスを持っています:

  1. アイテム クラスは、カタログに格納される単一のアイテムを定義します。
  2. Catalog クラスは、Item オブジェクトのリストを維持します。
  3. メインメソッドを備えたクライアントクラス。

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)

以下は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

以下はitemNumのセット/取得です

     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

//以下は私のカタログクラスです

 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

以下はクライアントクラスです。itemNum、情報、およびコストに関するユーザーからの入力を受け取ります。

 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
 }

どんな助けでも大歓迎です。

4

1 に答える 1

5

いくつかのエラーがあります...

あなたのクラスカタログでは、この行は正しくありません:

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

あなたがしなければならない:

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

クラス Client では、newItem も listOfObjects も参照していないため、そのクラスでは使用できません。クライアントのメイン メソッドから listOfObjects に要素を追加する場合は、次のようにすることができます。

public class Client {
    public static void main(String[] args) {   //start main
        Catalog serv = new Catalog();
        ......
        serv.add(1, "", 1.0d);
    }
}
于 2013-10-03T19:18:43.947 に答える