2013-11-13 4 views
0

Я получаю сообщение об ошибке, что BookCollection.java:67: ошибка: несовместимые типы collection [lastElement ++] = b;Не удается найти символ в цикле

Также не уверен, что мой конструктор настроен правильно? Направления были:

Конструктор: Учитывая параметр, определяющий ограничение на размер коллекции, создается пустая коллекция книг с использованием заданного параметра. Параметр не должен превышать заданный максимальный размер 200.

Я правильно инициализирую свои переменные? Ответ ниже помог мне изменить мой код, но, хотя я не получаю ошибок в моем конструкторе, я чувствую, что это может быть неправильно в соответствии с указаниями.

Я вставлю пару кусков моего код, относящийся к вопросу.

public class BookCollection{ 

    //data fields, need complete 
    private int limit = 200; 
    //Array of type book 
    private int Book[]; 

    //actual size of collection, initialized to zero. Must never exceed limit 
    private int collection[];  

    private int lastElement; 

    //Constructor 
    public BookCollection(int l, int c[], int le,int b[]){ 
     Book = b; 
     collection = c; 
     limit = l; 
     lastElement = le; 
     int lastElement = 0; 
     if(limit <= 200){ 
      Book[] collection = new Book[limit]; 
     } else{ 
      throw new UnsupportedOperationException("CannotExceedLimit"); 
      } 
     } 

ANNDDDD где я получаю сообщение об ошибке:

public void addBook(int b[], int c[]) { 
     Book = b; 
     collection = c; 
     if (lastElement == collection.length) { 
      throw new UnsupportedOperationException("CorrectionFull"); 
     } 
     for (int i = 0 ; i != lastElement ; i++) { 
      if(b.equals(collection[i])) { 
      throw new UnsupportedOperationException("DuplicateBook"); 
      } 
     } 
     collection[lastElement++] = b; 
    } 
+0

У вас есть переменная 'int []' с именем 'collection'. Это тот, на который вы ссылаетесь в методе 'addBook'. –

ответ

3

Вы не объявляли i как целое число в вашей for цикле. Поэтому добавьте объявление с инициализацией. Заменить этот

for(i=0; i<collection.length; i++){ 

с

for(int i=0; i<collection.length; i++){ 
+0

+1 - Мне нужно набрать быстрее :) –

+1

Это наименьшая из проблем OP :) – dasblinkenlight

0

Вы did't объявили i как переменную в int типа, сделать это как

for(int i=0; i<collection.length; i++){ 
    ^here 
    //... 
} 
2

Это утверждение

BookCollection[] collection = new BookCollection[limit]; //initialize array of 200  

объявляет местным массивом. Он уничтожается, как только вы покидаете конструктор.

Коллекция, которая остается вокруг этого один:

private int collection[]; 

Он состоит из int с, так что, когда вы пытаетесь сделать это

collection[i].add(b);  

компилятор правильно жалуется, что int не имеет метод называется add.

Хорошие шансы, даже объявляя коллекцию как

private Book[] collection; 

и его инициализации в конструкторе, как

collection = new Book[limit]; 

не собирается помочь, хотя: в отличие от коллекций, Java массивы не позволяют вы динамически меняете свой размер, поэтому вам нужно сохранить индекс последнего элемента массива collection[], который был установлен.

Это приводит к пониманию того, что вам нужно цикл для поиска дубликатов, и отмечая еще: определить элемент int lastElement, установите его равным нулю в конструкторе, и переписать метод addBook следующим образом:

public void addBook(Book b) { 
    if (lastElement == collection.length) { 
     throw new UnsupportedOperationException("CorrectionFull"); 
    } 
    for (int i = 0 ; i != lastElement ; i++) { 
     if(b.equals(collection[i])) { 
      throw new UnsupportedOperationException("DuplicateBook"); 
     } 
    } 
    collection[lastElement++] = b; 
} 
+0

Отличный ответ! Я действительно ценю ваш глубокий отклик. Причина, по которой я объявила массив _BookCollection [] collection = new BookCollection [limit]; _, состоит в том, что в инструкциях сказано: _Constructor_: _Введен параметр, задающий ограничение на размер коллекции, создается пустая коллекция книг с использованием заданного параметра. Параметр не должен превышать заданный максимальный размер 200_. Я находился под впечатлением, я выполнял инструкции, выполняя это в своем конструкторе. Что я могу сделать по-другому, чтобы следовать этим инструкциям? – jSeesFor3ver

+0

@ jSeesFor3ver Вам нужно проверить 'limit', чтобы оно было меньше или равно 200, иначе выведите исключение. Вам не следует создавать массив объектов «BookCollection»: он должен быть массивом объектов «Book» (я отредактировал ответ, чтобы отразить это). 'int Book []' должен быть удален вообще: это массив целых чисел с именем 'Book', а не массив типа' Book'. – dasblinkenlight

+0

Я обновил свой код. Во-первых, мне не нужно передавать b книги типа, переменную коллекции типов и переменную типа lastElement в мой метод addBook? А также, (смотри мое редактирование в моем вопросе выше), кажется, что я все еще получаю эту ошибку _error: несовместимые типы collection [lastElement ++] = b; _ – jSeesFor3ver

Смежные вопросы