2013-10-01 2 views
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)); 
    } 
} 

ответ

3

ItemNotFound класс имеет только один конструктор: один, который принимает int параметр:

public ItemNotFound(int id) 

Вы пытаетесь вызвать, что без каких-либо аргументов:

throw new ItemNotFound(); 

Это не будет работать - вам нужно передать аргумент для этого параметра. Я подозреваю, что вы просто хотите:

throw new ItemNotFound(id); 

(. Учитывая, что параметр метода findid это идентификатор вы ищете)

Кроме того, я бы рекомендовал вам переименовать исключение включить суффикс Exception, чтобы следовать соглашениям о присвоении имен Java - так ItemNotFoundException.

Вы будете также необходимо изменить цикл - в данный момент вы бросаете исключение, если значение первого не имеет правильный идентификатор, в то время как предположительно вы хотите перебрать их все. Таким образом, ваш метод 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); 
} 
2

Вы указали пользовательский конструктор к классу ItemNotFound и не прохождение требуемые аргументы, когда вы его используете.

Попробуйте пройти необходимые арг здесь

throw new ItemNotFound(id); 

Так что ваш код становится

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(id); // Now constructor satisfied 
      } 
     } 
    } 

И

throw new ItemNotFound(); 

Это выше линии верно, когда ваш класс ItemNotFound, как

// This exception is thrown when searching for an item 
// that is not in the catalog. 
public class ItemNotFound extends Exception { 
    public ItemNotFound() { 
     super("Sorry !! No item find with that id"); //Now a generic message. 
    } 
} 
0

throw new Item() недопустим, поскольку явный конструктор был определен Item (int id).

+0

Пожалуйста, приходите еще раз. Я не понял, как это связано с вопросом. – SudoRahul

+0

Извините, моя ошибка, я думал, что вы передаете аргумент int конструктору: super (String.format («Item% d не найден.», Id)); который присутствует в классе каталога. На самом деле, throe new Item() недействителен, поскольку вы определили явный элемент конструктора (int id) ... Pleasse игнорирует мой предыдущий ответ. –

+0

Отредактируйте свой ответ и опубликуйте его там. Не здесь, в комментариях. – SudoRahul

0

Вы предоставили конструктор без параметров.

public ItemNotFound() 

и вы вызываете new ItemNotFound(id), которые при создании экземпляра класса ItemNotFound ожидает конструктор с 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 
    } 
} 
Смежные вопросы