如何制作一个类的不同实例?

时间:2010-10-09 18:11:02

标签: java

我正在制作一个简单的程序,允许人们登记入住酒店(我的CS课程)。

我需要做的是检查房间里的人。有四个房间。我怎样才能做到这一点,当有人办理登机手续时,下一个办理登机手续的人将在2号房间办理登机手续。

我已经拥有以下内容:

class Hotel {

    Room room1, room2, room3, room4;

    Hotel() {
        room1 = new Room();
        room2 = new Room();
        room3 = new Room();
        room4 = new Room();
    }

    static checkIn() {
        Scanner sc = new Scanner(System.in);
        System.out.print("naam:");
        String invoer2 = sc.nextLine();

        if (room1.guest == null) {      
            room1.guestst = invoer2;
            System.out.println("Guest " + room1.guest + " gets room 1");
            return;
        } else {
            System.out.println("no rom");
        }

        return;                      
    }
}

class Room {
    static int count;
    String guest;

    Room() {
        guest = null;
        count--;
    }

    Room(String newGuest) {
        guest = newGuest;
        count++;
    }
}

class Guest {
    String name;

    Guest(String newName) {
        name = newName;
    }
}

4 个答案:

答案 0 :(得分:7)

首先,酒店有一个以上的房间。根据您到目前为止学到的内容,您应该使用数组来保存所有Room实例

Room[] rooms;

Hotel() {
    rooms = new Room[4];
}

ArrayList

List<Room> rooms;

Hotel() {
    rooms = new ArrayList<Room>();
}

另见:


根据您的评论

更新:只检查每个房间是否有客人,直到找到没有客人的房间(就像在现实世界中一样!)。伪:

if there is no guest in room1, then use room1;
else if there is no guest in room2, then use room2;
else if there is no guest in room3, then use room3;
else if there is no guest in room4, then use room4;
else say "sorry, no rooms left!";

使用数组时,这在简单的循环中更容易实现。

for each room, check if there is no guest in room, then use room;
if there is no room, then say "sorry, no rooms left!";

哦,当他/她离开房间时,不要忘记让客人null。这将使房间有资格重复使用。

另见:

答案 1 :(得分:1)

class Hotel {

Room room1, room2, room3, room4;

    Hotel() {
        room1 = new Room();
        room2 = new Room();
        room3 = new Room();
        room4 = new Room();
    }

}

如果您尚未学习数组。

但是Array(或ArrayList)是更好的方法。

答案 2 :(得分:1)

对静态的评论(也被Ishtar注意到)。

如果你在酒店课程(而不是实例)上进行checkIn静态,你会说checkIn与所有酒店相同,而不仅仅是你的酒店。这表明,如果您有5家酒店,每家都有自己的房间,所有的房间都是一样的。所以你可以在1号酒店办理登机手续,然后从2号酒店入住。那真的不是你想做的。

public class Hotel   {
  // stuff

  // Check a guest into this hotel
  public Room instanceCheckIn(Guest guest) {
    //stuff
  }

  // Check a guest into one of our hotels. It doesn't matter to which 
  // particular hotel this room belongs :)
  public static Room staticCheckIn(Guest guest) {
    //stuff
  }
}

用法:

Hotel instanceHotel = new Hotel();
// check a guest into a room of this hotel (instanceHotel)
instanceHotel.instanceCheckIn(someGuest);

// Check a guest into one of the rooms of our hotels
Hotel.staticCheckIn(someGuest);

// Error: cannot call a non-static method on a class
Hotel.instanceCheckIn(someGuest); 

// Technically OK, but incredibly bad taste. You suggest something
// is happening with this hotel (called instanceHotel) but in stead
// your actually working on all hotels together (shared data).
instanceHotel.staticCheckIn(someGuest);

一般来说,除非你真的需要,否则不要使用static这是一个很好的习惯。它表明您的域模型中存在某些问题。这并不意味着你不应该使用它,但要意识到它有一种特殊的气味。 (public static void main(String[] args)当然是一个特例)。

答案 3 :(得分:0)

  

下一个签到的人会   入住2号房间

目前无法做到这一点。您的酒店只有一个房间!它应该有更多,例如3:

class Hotel {

  Kamer kamer1;
  Kamer kamer2;
  Kamer kamer3;

  Hotel (){
    kamer1 = new Kamer();
    kamer2 = new Kamer();
    kamer3 = new Kamer();
  }
}

或者更好地使用arraylist

class Hotel {
  ArrayList<Kamer> kamers;

  Hotel (){
    kamers = new ArrayList<Kamer>();//make room-list
    kamers.add( new Kamer() );//add one room
    kamers.add( new Kamer() );//add one room
    kamers.add( new Kamer() );//add one room
    //more?
  }
}

如果您需要一间有3个房间的酒店,请致电:new Hotel();

static void checkIn() {
   Kamer k1 = new Kamer(g1.naam);

当有人想要办理入住手续时,您为什么要开新房?如果你需要,你不能只建一个新房间,对吗?如果您删除static,则可以使用字段kamer1kamer2(如果使用了ArrayList,则为kamers。)

 void checkIn()
 {
   if (kamer1.guest==null)
      //kamer1 is available!
   //
   //