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