在for循环中找不到符号

时间:2013-11-13 02:57:02

标签: java arrays class sorting initialization

我现在收到错误 BookCollection.java:67:错误:不兼容的类型       集合[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;
   }

3 个答案:

答案 0 :(得分:3)

您尚未在i循环中将for声明为整数。所以用初始化添加声明。替换此

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

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

答案 1 :(得分: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[]数组的最后一个元素的索引。 / p>

这导致您理解需要一个循环来查找重复项,并注意其他:定义元素int lastElement,在构造函数中将其设置为零,并按如下方式重写addBook方法: / p>

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;
}

答案 2 :(得分:0)

您没有将i声明为int类型变量,将其设为

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