Java 如何将一个对象指定给另一个对象

Java 如何将一个对象指定给另一个对象,java,object,Java,Object,我正在尝试建立一个包含3个类的程序模型;酒店、客房和客人。我已经在网站上四处查看了一下,虽然有些问题与此类似,但我没有发现我的问题。我的问题是,我无法将特定的客人设置为特定的房间。我的守则如下: class Hotel{ Room[] rooms; Hotel() { rooms = new Room[10]; Guest Rob = new Guest("Rob"); for (int j=0; j<rooms.length;j++){ roo

我正在尝试建立一个包含3个类的程序模型;酒店、客房和客人。我已经在网站上四处查看了一下,虽然有些问题与此类似,但我没有发现我的问题。我的问题是,我无法将特定的客人设置为特定的房间。我的守则如下:

class Hotel{
  Room[] rooms;
  Hotel() {
    rooms = new Room[10];
    Guest Rob = new Guest("Rob");
    for (int j=0; j<rooms.length;j++){
      rooms[j] = new Room(null);
    }
  }

  Guest checkIn(Guest){
    for (int i=0; i<rooms.length; i++){
      if(rooms[i]!=null){
        rooms[i] = Guest;
        return;
      }
    }
 }

  public static void main(String[] args) {
    new Hotel();
  }
}

class Room{
  Guest guest;

  Room (Guest n){
    this.guest = n;
  }
}

class Guest{
  String guestname;

  Guest(String n) {
    this.guestname = n; 
  }
}
就我现在所知。我设法创建了新的来宾,但现在我希望能够从aray中的第一个房间开始检查房间中的null,并将来宾分配给数组中的第一个房间,并使用null。 我已经制定了一个我相信可以做到这一点的方法;检查完毕,但我不确定应该在里面放些什么才能让客人真正进入房间

任何帮助都将不胜感激。对于任何格式错误,我深表歉意,这是我在这里的第一篇帖子

亲切问候,


Rob

你应该在房间课上使用getter和setter

然后,如果getGuest返回null,则房间可用,您可以使用新的guest调用setGuest

public Guest getGuest(){

return guest;

}

public void setGuest(Guest guest){

this.guest = guest;

}
您的签入方法可以是:

 void checkIn(Guest guest){

   for (int i=0; i<rooms.length; i++){

     Room room = rooms[i];

      if(room.getGuest() == null){
         room.setGuest(guest);
         return;
       }
     }
  }
在这里,您似乎错过了一些Java和OOP的通用命名约定

客人Rob=新的客人登记簿; Rob作为变量名不应大写

this.guestname=n;
多个单词使用驼峰大小写约定,即guestName。另外,您不需要引用this.guestName,只需说guestName即可。如果方法接受的参数也被命名为guestName,即this.guestName=guestName,则只需要使用this.guestName。同时将guestName字段设置为private。

Guest CheckingTest不是有效的方法签名,您需要为每个参数提供名称,例如Guest CheckingTest MyColGuest。您好,感谢您的回复!这不是创建了一个包含客人的新房间对象,而不是链接他们吗?或者“new Roomguest”仅用于链接它?这将创建一个新的Room对象,因为您声明要在rooms数组中查找第一个空值。如果您的意思是在rooms数组中查找来宾成员为null的第一个Room对象,那么另一个答案对此有很好的建议。是的,这就是我的意思。抱歉给您带来困惑。嗨,谢谢您的回复!我现在正在尝试,您输入的代码导致错误Guest无法转换为Room.Guest。除此之外,您能告诉我为什么在签入方法期间必须执行“Room Room=rooms[i]”吗?我猜是这样的,你提到的房间是正确的房间[I],对吗?签入方法应该是你把自己的房间放在拥有房间的酒店里。这是一种必须迭代房间的方法:因此使用for循环和'Room-Room=rooms[i]'。是的,你是对的,通过这种方式获得的房间变量,在下一个说明中指房间[i]。嗨,伯杰,很抱歉再次打扰你。不确定提出新问题或回答旧问题是否是常见做法。无论如何,我通过将代码设置为room.setGuestroom.guest(而不仅仅是guest)修复了前面提到的错误。DRJava现在编译代码很好。但是当我在类似CoffeeDregsa的模拟器中运行代码时,可能是一个已知的模拟器?它只是停在Room rooms=rooms[i]行。你知道为什么会这样吗?在开始其他方法之前,我试图通过声明“roomrooms”来修复它,但这似乎是多余的,无法修复它。
Guest checkIn(Guest guest){
    for(int i = 0; i < rooms.length; i++){
      if(rooms[i] == null){
        rooms[i] = new Room(guest);
        return guest;
      }
    }
}