java—如何自动将对象添加到另一个类的列表中?

yjghlzjz  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(446)

所以我现在正在为我的java类做一个项目。
以下是我的主要观点:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

public class Main {

    public static void main(String args[]){
        Entrepot Entrepot1=new Entrepot(3);
        Rangee Rangee1=new Rangee(2);
        Rangee Rangee2=new Rangee(3);
        Rangee Rangee3=new Rangee(3);
        /*for(int i=0;i<Entrepot.getNbRangee();i++) {
            Entrepot.addRangee(Rangee.getID()==i);
        }*/
        for(int i=0; i<Entrepot.getNbRangee(); i++) {
            Entrepot.addRangee(Rangee.getID());
        }
        Meuble meuble = new Meuble("Table",new Lot[]{new Lot(new Vis(200,10),1),new Lot(new Planche(1000,500),3)},"Salon",3);
        meuble.afficherMeuble();
        System.out.println(Rangee1.getID());
        System.out.println(Rangee2.getID());
        System.out.println(Rangee3.getID());
        System.out.println(Entrepot.getNbRangee());
        System.out.println(Entrepot.getListeRangee());

    }
}

每次用户创建一个对象“range”时,我希望它自动添加到entrepot类中的listerangee列表中。
正如你在我的main上看到的,我尝试了一个for循环,它在其中添加了每个具有i id的range,但没有成功。
我是个新手,如果你能帮我,我会非常感激的!
谢谢!
Range.java文件

import java.util.ArrayList;
import java.util.List;

public class Rangee {
    private static int count=0;
    private static int ID;
    private int longueur;
    private int largeur=1;
    private int hauteur=1;
    private int volume= longueur*largeur*hauteur;
    private ArrayList<Lot> listeLot= new ArrayList<Lot>();

    public Rangee(int longueur) {
        this.longueur=longueur;
        if(ID<Entrepot.getNbRangee()) {
        ID=count++;
        }
        else {
            System.out.println("NON");
        }

    }

    public static int getID() {
        return ID;
    }

    public void setID(int iD) {
        if(ID>Entrepot.getNbRangee()) {
            System.out.println("Le nombre maximum de rangee est de "+ Entrepot.getNbRangee());
        }
        ID = iD;
    }

转口.java

import java.util.ArrayList;
import java.util.List;

public class Entrepot {
    private static int nbRangee;
    static ArrayList<Rangee> listeRangee= new ArrayList<Rangee>(nbRangee);

    public Entrepot(int nbRangee) {
        this.nbRangee=nbRangee;
    }
    public static boolean addRangee( Rangee newRangee ) {
              listeRangee.add(newRangee);
              return true;
      }

    public static int getNbRangee() {
        return nbRangee;
    }
    public void setNbRangee(int nbRangee) {
        this.nbRangee = nbRangee;
    }
    public static ArrayList<Rangee> getListeRangee() {

        return listeRangee;
    }
    public void setListeRangee(ArrayList<Rangee> listeRangee) {
        this.listeRangee = listeRangee;
    }

}
oxosxuxt

oxosxuxt1#

我认为最简单的方法是间接使用range的构造函数作为entrepot的类方法。
在entrepot类中,可以添加以下内容(如果需要,可以使用参数):

public void createRangee(){
            Rangee aux = new Rangee();
            listeRangee.add(newRangee);
        }

那么在main中,就不必调用构造函数,而是调用以下方法:

Entrepot ntrepot1=new Entrepot(3);
entrepot1.createRangee(); // The number of times you need

至于每个用户的id,您可以使用以下解决方案:
private static atomicinteger id\u generator=new atomicinteger(1000);

Rangee aux = new Rangee(ID_GENERATOR.getAndIncrement());
mqkwyuun

mqkwyuun2#

制造 Rangee 的构造函数私有并公开一个静态工厂方法来构建的新示例 Rangee 会自动添加到 Entrepot .

public Rangee {
  private Rangee(int longueur) {
    this.longueur=longueur;
    if(ID<Entrepot.getNbRangee()) {
      ID=count++;
    } else {
      System.out.println("NON");
    }
  }

  public static Rangee createRangee(int longueur) {
    Rangee rangee = new Rangee(longueur);
    Entrepot.listeRangee.add(rangee);
    return rangee;
  }

如果id低于 Entrepot.getNbRangee() 内部 createRangee 方法并返回null/throw error(如果发生这种情况,而不是打印消息)。
那么你的主要方法是:

Rangee rangee1 = Rangee.createRangee(2); // was Rangee Rangee1=new Rangee(2);
Rangee rangee2 = Rangee.createRangee(3); // was Rangee Rangee2=new Rangee(3);
Rangee rangee3 = Rangee.createRangee(3); // was Rangee Rangee3=new Rangee(3);

其他一切都一样。
请注意 createRangee 可以在中创建 Entrepot 而不是 Rangee ,但是 Rangee 的构造函数只能由 Entrepot . 这意味着:1/使构造函数具有默认访问权限(没有public/private)并将两个类放在同一个包中(同一个包中的其他类仍然可以创建 Rangee 示例)或2/移动 Rangee 类内部 Entrepot 作为静态类并保持构造函数私有。说了这么多,下面是我将如何在 Entrepot 带包专用 Rangee 施工单位:

class Entrepot {
    private int nbRangee;
    private List<Rangee> listeRangee = new ArrayList<>(nbRangee);

    public Entrepot(int nbRangee) {
        this.nbRangee=nbRangee;
    }

    public int getNbRangee() {
        return nbRangee;
    }
    public void setNbRangee(int nbRangee) {
        this.nbRangee = nbRangee;
    }
    public List<Rangee> getListeRangee() {
        return listeRangee;
    }
    public void setListeRangee(ArrayList<Rangee> listeRangee) {
        this.listeRangee = listeRangee;
    }

    public Rangee createRangee(int longueur) {
        if (listeRangee.size() < nbRangee) {
            Rangee rangee = new Rangee(longueur);
            listeRangee.add(rangee);
            return rangee;
        } else {
            System.out.println("NON");
            return null;
        }
    }
}

请注意,我已经删除了一些静态这里和那里,因为他们现在更有意义。请注意,您可以设置 rangee 的id到 listeRangee.size() 内部 createRangee . 您以前的实现更新了一个静态变量,并为所有3个范围打印了3

getid()`,我怀疑这不是你想要的。
主要方法是:

class Main {
    public static void main(String[] args) {
        Entrepot entrepot = new Entrepot(3);
        Rangee rangee1 = entrepot.createRangee(2);
        Rangee rangee2 = entrepot.createRangee(2);
        Rangee rangee3 = entrepot.createRangee(3);
    }
}

相关问题