0

我现在收到错误BookCollection.java:67: error: incompatible types 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;
   }
4

3 回答 3

3

您尚未在循环中声明i为整数。for所以添加带有初始化的声明。替换这个

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

  for(int i=0; i<collection.length; i++){
于 2013-11-13T02:58:19.077 回答
2

这个说法

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

声明一个本地数组。一旦您离开构造函数,它就会被销毁。

留下来的收藏品是这个:

private int collection[];

它由ints 组成,因此当您尝试执行此操作时

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;
}
于 2013-11-13T03:01:13.400 回答
0

您没有声明iint类型变量,请将其设为

for(int i=0; i<collection.length; i++){
     ^here
   //...
}
于 2013-11-13T03:00:10.937 回答