如何在创建对象时增加对象数组?

时间:2018-05-18 12:08:53

标签: java arrays

在我的项目中,我获得了下面给出的课程。无论何时创建Flat对象,数组flats都会增加一个扁平对象。我的问题是每次创建平面对象时如何增加此数组。 我真的坚持下去了。不知道从哪里开始!

THX!

public class Block {

public Block() {
    super();
    flats = new Flat[0];
}



Flat[] flats;

class Flat {

    Room[] rooms;

    class Room {
        private int width;
        private int height;
        private int numWindow;

        public Room(int w, int h, int n) {
            super();
            this.width = w;
            this.height = h;
            this.numWindow = n;


        }

        @Override
        public String toString() {
            return width + "/" + height + "/" + numWindow;
        }
    }

    public Flat() {
        super();
        rooms = new Room[0];


    }
}
}

4 个答案:

答案 0 :(得分:1)

FlatBlock的内部类,因此,flats成员变量可以从Flat类直接访问。

根据文件:

  

与实例方法和变量一样,内部类与其封闭类的实例相关联,并且可以直接访问该对象的方法和字段。

您可以像这样修改Flat构造函数:

public Flat() {
  super();
  rooms = new Room[0];

  // append the newly created flat into the flats array
  flats = Arrays.copyOf(flats, flats.length + 1);
  flats[flats.length - 1] = this;
}

这意味着将为每个新单元复制平面数组,这可能比使用ArrayList效率低得多。

虽然这有效,但我强烈建议不要使用深层嵌套的类结构,并使用更好的依赖关系和所有权模型。但这超出了这个问题的范围。

答案 1 :(得分:0)

你能把这个数组发送给Flat的构造函数吗?

代码(基于您的代码):

public class Block {

    private Flat[] flats;

    public Block(Flat[] flats) {
        this.flats = flats;
    }

    public Flat[] getFlats() {
        return flats;
    }

    public void setFlats(Flat[] flats) {
        this.flats = flats;
    }


    @Override
    public String toString() {
        return Arrays.toString(flats);
    }


    public class Flat {

        private String value;


        public Flat() {
            //init your Flat
            this.value = UUID.randomUUID().toString();

            flats = Arrays.copyOf(flats, flats.length + 1);
            flats[flats.length - 1] = this;

        }

        @Override
        public String toString() {
            return value;
        }
    }
}

public class Main {

    public static void main(String[] args) {
        System.out.println("Test");
        Block block = new Block(new Block.Flat[0]);
        block.new Flat();
        block.new Flat();

        System.out.println(block.toString());
    }

}

输出: [b30c54dd-7e5d-46bc-81cf-18172e68337e,c22c4589-7563-4ada-a4eb-16226bd81f45]

答案 2 :(得分:0)

将flats数组定义为类Block的静态成员,并在Flat的构造函数中推送新创建的对象。

答案 3 :(得分:0)

如果你只想计算对象,你不需要一个数组,你可以使用一个名为“让NumOfObjects”的静态字段,并在每次创建构造函数时递增它。  但是,如果您希望将对象保存在数组中,我建议您在这种情况下使用ArrayList(作为Flat类中的静态字段)(documentation)而不是数组,因为java中的数组大小固定,您和# 39; ll必须创建一个具有固定初始大小的数组,并且在Flat构造函数中,您应该检查数组是否已满,您应该创建更大的数组,复制旧数组,并添加新对象。 ArrayList负责处理所有这些而不是你。