在Java中的其他方法中,ArrayList为空



ArrayList在class中初始化,其值在方法中设置(仅在该方法中存在)

我该如何防止数组列表为空,或者为什么会发生这种情况?

(编辑:我已将此次要项目添加到github(https://github.com/goodstuff20/NENAM))

List<Node> nodes = new ArrayList<Node>(); 
public Creature(Node[] nodes){
    for(int i = 0; i < nodes.length; i++) {
        this.nodes.add(nodes[i]); 
    }  
    System.out.println(this.nodes.size()); //4
}
public void tick(){  
    System.out.println(nodes.size()); //0 
}

您在Creature类中定义了2个构造函数。在第二个ctor中,您使用新的运算符呼叫第一个ctor

public Creature(Node[] nodes){
    //....
    for(int i = 0; i < nodes.length; i++){
        nodess.add(nodes[i]);
    }
    //....
}
public Creature(int[][] nodePos, int[][] musclePos){ 
    //...
    Node[] nodes = new Node[nodePos.length]; 
    //...
    new Creature(nodes);
}

也许您的意图是通过调用另一个ctor来更改当前创建的对象,但您创建了一个与第一个对象没有关系的新对象。要在同一对象的ctor中调用另一个ctor,必须使用this,但这必须在第一行中完成。例如:

public Creature(int[][] nodePos, int[][] musclePos){ 
    this(...);
}

出于您的目的,最好使用init方法:

public Creature(Node[] nodes){
    init(nodes);
}
public Creature(int[][] nodePos, int[][] musclePos){ 
    //...
    Node[] nodes = new Node[nodePos.length]; //when defineing an int length = normal and not -1
    //...
    init(nodes);
}
private void init(Node[] nodes) {
    //...
    for(int i = 0; i < nodes.length; i++){
        nodess.add(nodes[i]);
    }
    //...
}

最新更新