1

这是涉及创建酒店宾客服务的课程作业。Room我用 8 个“楼层”、20 个“房间”创建了下面的二维数组,并用对象填充它们。我目前正在尝试使用嵌套的 for 循环来遍历每个 Room 对象并为其分配一个房间号。例如,第 1 层将包含房间 101-120。

下面的类是我正在使用的测试类。

public class Test {

    public Test() {
    }

    public static void main(String[] args) {
        /**
          * Creates a two dimensional array with 8 rows and 20 columns
          */
        Room [][] hotelBuild = new Room[8][20];
        /**
          * populates the 2d array with Room objects
          */
        for (int floor=0; floor<hotelBuild.length; floor++) {
            for (int room=0; room<hotelBuild[floor].length; room++) {
                hotelBuild[floor][room] = new Room();
                /**
                 * used to print out contents of 2d array
                 */
                //System.out.print(hotelBuild[floor][room]=new Room());
            }
        }
    }
}

下面是Room包含变量、setter、getter 以及toString()覆盖方法的类。

public class Room {

//Instance variables

    /**
     *the rooms number
     */
    private int roomNumber;

    /** is the room occupied or not
     *
     */
    private boolean isOccupied;

    /** name of guest
     *
     */
    private String guest;

    /** cost per day
     *
     */
    private double costPerDay;

    /** number of days guest is staying
     *
     */
    int days;

    //Constructors
    public Room(){
    }
    /** Construct a room with values above
     *
     */
    public Room(int room, boolean nonVacant, String guestName, double cost, int day) {
        roomNumber = room;
        isOccupied = nonVacant;
        guest = guestName;
        costPerDay = cost;
        days = day;
    }

    // getters

    /** gets roomNumber
     *
     */
    public int getRoomNumber(){
        return roomNumber;
    }

    /** gets isOccupied
     *
     */
    public boolean getIsOccupied(){
        return isOccupied;
    }

    /** gets guest
     *
     */
    public String getGuest(){
        return guest;
    }

    /** gets costPerDay
     *
     */
    public double getCostPerDay(){
        return costPerDay;
    }

    /** gets days
     *
     */
    public int getDays(){
        return days;
    }

    // setters

    /** sets isOccupied
     *
     */
    public void setIsOccupied(boolean full){
        this.isOccupied = full;
    }

    /** sets days
     *
     */
    public void setDays(int numDays){
        this.days = numDays;
    }

    /** sets guest name
     *
     */
    public void setGuest(String name){
        this.guest = name;
    }

    /** formats output depending if room is occupied or not
     *
     */

    public String toString(){
        if(isOccupied == true){
            return "Room number: " + roomNumber + "\n"+ "Guest name: "
                + guest + "\n"+ "Cost : " + costPerDay
                + "\n"+ "Days: " + days + "\n";
        }
        else{
            return "Room number " + roomNumber
                + " costs " + costPerDay + "\n";
        }
    }
}

如何Room为数组中的每个对象分配一个唯一的房间号?

4

4 回答 4

0

例如,您可以通过构造函数传递它,也可以在课堂房间中使用设置器进行设置(课堂啊哈哈)

例如:

for (int floor=0; floor<hotelBuild.length; floor++){
        for (int room=0; room<hotelBuild[floor].length; room++){
            hotelBuild[floor][room]=new Room((floor+1)*100+room+1);
        }
    }

在你的 Room 类中,你可以添加一个只有房间号作为参数的构造函数

class Room{
  public Room(int roomNumber){
    this.roomNumber = roomNumber;
  }
...
}
于 2013-09-03T07:48:30.143 回答
0

你可以做

for (int floor=0; floor<hotelBuild.length; floor++){
    for (int room=0; room<hotelBuild[floor].length; room++){
        Room r = new Room();
        r.setRoomNumber(
           cleverCalculationWithFloorAndRoomNr(floor, room));
        hotelBuild[floor][room]= r;
于 2013-09-03T07:44:49.303 回答
0

如果您想要一种将数字按正确顺序排列的方法,请使用您已经拥有的变量。使用计数来知道它是什么楼层(它将在第一个循环结束时增加)。然后房间号是 Floor * 100 + 在第一个循环开始时您重置为 1 的另一个变量。只是一个提示来帮助你。填补空白;)

int floorNumber = 1;
int roomNumber = 1;
for (int floor=0; floor<hotelBuild.length; floor++){
        for (int room=0; room<hotelBuild[floor].length; room++){
            hotelBuild[floor][room]=new Room();

                            /**
                             * used to print out contents of 2d array
                             */
            //System.out.print(hotelBuild[floor][room]=new Room());
            //Add room number here.
            //Increase room number

        }
  //floorNumber increase
  //roomNumber reset
    }

一旦你实现了这一点,你可以尝试使用循环(房间和地板)中的变量,并进行一些小的更改。

于 2013-09-03T07:47:26.130 回答
0
for (int floor=0; floor<hotelBuild.length; floor++){
    for (int room=0; room<hotelBuild[floor].length; room++){
        hotelBuild[floor][room]=new Room();
        // room number format: xxyy, x = floor, y = room
        // this assumes maximum 99 rooms per floor, it should be enough
        hotelBuild[floor][room].setNumber((floor + 1) * 100 + room + 1);
    }
}
于 2013-09-03T07:47:45.337 回答