Java 如何在另一个对象中声明对象数组长度

Java 如何在另一个对象中声明对象数组长度,java,Java,我试图创建一个有3个对象的程序;旅馆,房间和床。对象床将保存有关床的信息。对象房间将保存有关房间的信息,包括房间包含多少张床。对象酒店将包含有关其包含多少房间的信息 我的Hotel类代码如下所示 public class Hotel { private String name; private boolean HasVacency = false; public int numberOfRooms; Room[] rooms = new Room[numberO

我试图创建一个有3个对象的程序;旅馆,房间和床。对象床将保存有关床的信息。对象房间将保存有关房间的信息,包括房间包含多少张床。对象酒店将包含有关其包含多少房间的信息

我的Hotel类代码如下所示

public class Hotel {

    private String name;
    private boolean HasVacency = false;
    public int numberOfRooms;
    Room[] rooms = new Room[numberOfRooms + 1];

    public Hotel() {


    }

    public void setRoom(int numberOfRooms) {
        this.numberOfRooms = numberOfRooms;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }





}
public static void main(String[] args) {
    HotelTest t = new HotelTest();
    t.getHotelInfo();



}

public void getHotelInfo() {
    Hotel test = new Hotel();
    int numberOfRooms;
    int numberOfBeds;
    String size;
    Scanner input = new Scanner(System.in);

    System.out.println("what is the name of the hotel");
    String name = input.next();
    test.setName(name);

    System.out.println("how many rooms does the hotel have");
    numberOfRooms = input.nextInt();
    test.setRoom(numberOfRooms);
    System.out.println(test.rooms.length);


    for( int i = 0; i< test.numberOfRooms + 1; i++) {

        System.out.println("how many beds does room " + (i + 1) + " have");
        numberOfBeds = input.nextInt();
        System.out.println(i);
        test.rooms[i].setNumberOfBeds(numberOfBeds);

    }

}
我在其中创建hotel并声明值的测试类的代码如下所示

public class Hotel {

    private String name;
    private boolean HasVacency = false;
    public int numberOfRooms;
    Room[] rooms = new Room[numberOfRooms + 1];

    public Hotel() {


    }

    public void setRoom(int numberOfRooms) {
        this.numberOfRooms = numberOfRooms;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }





}
public static void main(String[] args) {
    HotelTest t = new HotelTest();
    t.getHotelInfo();



}

public void getHotelInfo() {
    Hotel test = new Hotel();
    int numberOfRooms;
    int numberOfBeds;
    String size;
    Scanner input = new Scanner(System.in);

    System.out.println("what is the name of the hotel");
    String name = input.next();
    test.setName(name);

    System.out.println("how many rooms does the hotel have");
    numberOfRooms = input.nextInt();
    test.setRoom(numberOfRooms);
    System.out.println(test.rooms.length);


    for( int i = 0; i< test.numberOfRooms + 1; i++) {

        System.out.println("how many beds does room " + (i + 1) + " have");
        numberOfBeds = input.nextInt();
        System.out.println(i);
        test.rooms[i].setNumberOfBeds(numberOfBeds);

    }

}
然而,当我试图设置测试中的房间数时,我总是得到一个空指针。对不起,代码太乱了

class Hotel {

    private String name;
    private boolean HasVacency = false;


    public Hotel(int numberOfRooms) {

        Room[] rooms = new Room[numberOfRooms + 1];

    }



    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }
}

我修改了你们的酒店等级。在旧代码中,在更新numberOfRooms之前,已初始化房间数组。创建类似以下Hotel test的Hotel对象=新建HotelnumberOfRooms

这里有几点要看。您的代码破坏了封装,您的hotel类的公共成员被其他类访问;你可以利用构造器使事情变得更整洁;考虑从酒店的组成部分向上而不是自上而下的方法来创建酒店。我已经包含了一些基于您的示例代码

public class Hotel {

    private final List<Room> rooms;

    private final String name;

    // constructor to initialize hotel with name and number of rooms
    public Hotel(String name, List<String> rooms) {
        this.name = name;
        this.rooms = rooms;
    }

    public Room[] getRooms() {
        return this.rooms;
    }

    public String getName() {
        return this.name;
    }

}

public class Room {

    private final int beds;

    // constructor to initialize a room with the number of beds it needs
    public Room(int beds) {
        this.beds = beds;
    }

    public int getBeds() {
        return this.beds;
    }

}

public void getHotelInfo() {
    Scanner input = new Scanner(System.in);

    System.out.println("what is the name of the hotel");
    String name = input.next();

    System.out.println("how many rooms does the hotel have");
    int numberOfRooms = input.nextInt();

    List<Room> rooms = new ArrayList<>();        

    for( int i = 0; i< numberOfRooms; i++) {
        System.out.println("how many beds does room " + (i + 1) + " have");
        int numberOfBeds = input.nextInt();

        // create a room with the number of beds specified and add it to the list of rooms
        Room room = new Room(numberOfBeds);
        rooms.add(room);
    }

    Hotel hotel = new Hotel(name, rooms);

    // from here on, if you want the hotel's name or its rooms, you can use the appropriate getter methods in the Hotel and Room classes

}