我正在制作一个简单的程序,允许人们登记入住酒店(我的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;
}
}
答案 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
,则可以使用字段kamer1
,kamer2
(如果使用了ArrayList,则为kamers
。)
void checkIn()
{
if (kamer1.guest==null)
//kamer1 is available!
//
//