2

私はかなり新しく、Java使用してBlueJいます。エラーが発生し続けます:

constructor ItemNotFound in class ItemNotFound cannot be applied to given types;
required: int
found: no arguments
reason: actual and formal arguments lists differ in length

私はかなり混乱しており、問題を解決する方法がわかりません。うまくいけば、誰かが私を助けることができます。前もって感謝します。

ここに私のクラスのカタログがあります:

public class Catalog {
    private Item[] list;
    private int size;

    // Construct an empty catalog with the specified capacity.
    public Catalog(int max) {
        list = new Item[max];
        size = 0;
    }

    // Insert a new item into the catalog.
    // Throw a CatalogFull exception if the catalog is full.
    public void insert(Item obj) throws CatalogFull {
        if (list.length == size) {
            throw new CatalogFull();
        }
        list[size] = obj;
        ++size;
    }

    // Search the catalog for the item whose item number
    // is the parameter id.  Return the matching object 
    // if the search succeeds.  Throw an ItemNotFound
    // exception if the search fails.
    public Item find(int id) throws ItemNotFound {
        for (int pos = 0; pos < size; ++pos){
            if (id == list[pos].getItemNumber()){
                return list[pos];
            }
            else {
                throw new ItemNotFound(); //"new ItemNotFound" is the error
            }
        }
    }
}

参考までに、次のコードも参照してくださいclass ItemNotFound

// This exception is thrown when searching for an item
// that is not in the catalog.
public class ItemNotFound extends Exception {
    public ItemNotFound(int id) {
        super(String.format("Item %d was not found.", id));
    }
}
4

4 に答える 4

3

このクラスには、パラメーターItemNotFoundを受け取るコンストラクターが 1 つだけあります。int

public ItemNotFound(int id)

引数なしでそれを呼び出そうとしています:

throw new ItemNotFound();

それはうまくいきません - そのパラメータに引数を渡す必要があります。私はあなたがただ欲しいと思う:

throw new ItemNotFound(id);

id(メソッドへのパラメーターfindが探している ID であると仮定します。)

さらに、例外の名前を変更して、ExceptionJava 命名規則に従うためのサフィックスを含めることをお勧めします - so ItemNotFoundException

また、ループを変更する必要があります。現在、最初の値に正しい ID がない場合は例外をスローしていますが、おそらくそれらすべてをループしたいと考えています。したがって、findメソッドは次のようになります。

public Item find(int id) throws ItemNotFoundException {
    for (int pos = 0; pos < size; ++pos){
        if (id == list[pos].getItemNumber()){
            return list[pos];
        }
    }
    throw new ItemNotFoundException(id);
}
于 2013-10-01T06:39:23.480 に答える
0

パラメータなしでコンストラクタを指定しました。

public ItemNotFound()

new ItemNotFound(id)クラス ItemNotFound のインスタンスの作成中に which を呼び出していると、コンストラクターが必要になりone parameter of type intます。したがって、オーバーロードされたコンストラクターが必要です

public class ItemNotFound extends Exception {
    public ItemNotFound() {
        super("Sorry !! No item find with that id"); //Now a generic message.
    }

    public ItemNotFound(int if) {
        this(); //Since you are not using any int id in this class
    }
} 
于 2013-10-01T06:55:30.920 に答える