我无法将对象数组中的所有元素分配给另一个

问题描述 投票:-1回答:1

我可以构建一个对象数组,该对象数组可以存储所需数量的对象并进行打印。

我已经声明了一个初始数组来存储对象,如果超出了初始限制,则创建一个更大的将元素从数组a移到b的动作


public class SetofBooks {
    private int iLimit;
    private Book[] books;
    private int c=0;
    private int t=1;
    Book[] nbooks; 
    private String s="";
    public SetofBooks (int i) {
        iLimit=i;
        books=new Book[iLimit];

    }
    public boolean addBook(Book b) {

        if (c>=iLimit) {
            nbooks=new Book[c+1];
            while (t!=0) { 
            for (int i=0;i<books.length;++i)
                nbooks[i]=books[i];
            t=0;
            }
         for (int i=0;i<c;i++)
             if (b.equals(nbooks[i]))
                 return false;       
         nbooks[c]=b;
        c++;
returns true;


    }
        books[c]=b;
        for(int i=0;i<c;i++)
        if(books[i].equals(books[c]))

            return false;
        c++;
        return true;
        }

    public String toString() {
        if (c>=iLimit)
        for(int i=0;i<c;i++)
            s+=nbooks[i] + " ";
        else 
            for (int j=0;j<c;j++)
                s+=books[j] + " ";

        return s;
    }
}

当我尝试打印对象数组时,它只打印最后一个元素而其余元素为null的页面。

java arrays object
1个回答
0
投票

在Java中,数组的大小一旦定义就无法更改。因此,要获得所需的功能,我建议使用Java Collections ArrayList。

import java.util.ArrayList; // import the ArrayList class

class Main {
  public static void main(String[] args) {
    Book book1 = new Book("Harry Potter", 11);
    Book book2 = new Book("Star Wars", 32);

    ArrayList<Book> books = new ArrayList<Book>(); // Create an ArrayList object

    books.add(book1);
    books.add(book2);

    for(Book b : books) {
      System.out.println(b.getName());
    }
  }
}

class Book {
  private String name;
  private int age;

  public Book(String name, int age) {
    this.name = name;
    this.age = age;
  }

  public String getName() {
    return name;
  }

  public int getAge() {
    return age;
  }
}

因为如果您需要一个简单的数组类型来动态调整大小,那么您要做的步骤是:

  1. 查找到的数组太小
  2. 创建大小为旧+1的新数组
  3. 将所有数据从旧阵列复制/移动到新阵列
  4. 处理旧数组

此逻辑改为在ArrayList类型内处理。

© www.soinside.com 2019 - 2024. All rights reserved.