2016-01-11 4 views
-1

Я пытаюсь смоделировать программу с 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) и назначать гостя первой комнате в массиве с нулевым значением. Я уже сделал метод, который, я считаю, может это сделать; checkIn (Гость), но я не уверен, что нужно положить внутрь, чтобы установить (гость) в комнату [i].

Любая помощь была бы принята с благодарностью. Извиняюсь за любые ошибки формирования, это мой первый пост здесь.

С наилучшими пожеланиями,

Роб

+1

'Guest checkIn (Гость)' не является допустимой сигнатурой метода, вам необходимо указать имя для каждого параметра, например. 'Guest checkIn (Гость myCoolGuest)'. –

ответ

2

Вы должны использовать геттер и сеттер в своем классе номер.

Затем, если getGuest возвращает null, номер доступен, и вы можете позвонить setGuest с новым гостем.

public Guest getGuest(){ 

return guest; 

} 

public void setGuest(Guest guest){ 

this.guest = guest; 

} 

Ваш метод Checkin может быть:

void checkIn(Guest guest){ 

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

    Room room = rooms[i]; 

     if(room.getGuest() == null){ 
     room.setGuest(guest); 
     return; 
     } 
    } 
    } 
+0

Привет, спасибо, что ответили! Я пытаюсь это сделать прямо сейчас, введенный вами код приводит к ошибке «Гость не может быть преобразован в Room.Guest». Кроме того, не могли бы вы рассказать мне - почему? «Комната комнаты = номера [i]» должна быть сделана во время метода checkIn? Я предполагаю, что это так, что комната, на которую вы ссылаетесь после этого, - это правильная комната [i], верно? – Rob

+0

Метод checkIn должен находиться там, где вы разместили свой номер, в отеле (который владеет комнатами). И это метод, в котором вы должны перебирать свои комнаты: отсюда цикл «за» и «Комната комнаты = комнаты [i]». И да, вы правы, переменная «комната», полученная таким образом, относится к комнатам [i] в ​​следующих инструкциях. – Berger

+0

Привет, Бергер, извините, что беспокою вас снова. Не уверен, что обычная практика заключается в том, чтобы задавать новые вопросы или отвечать на старые. Во всяком случае, я исправил ошибку, о которой я говорил, установив код в room.setGuest (room.guest), а не просто гость. Теперь DRJava компилирует код. Но когда я запускаю код в CoffeeDregs (своего рода симулятор, возможно, известный?), Он просто останавливается на линии «Комнатные комнаты = номера [i]». У вас есть идеи, почему это происходит?Я попытался исправить это, объявив «Комнатные комнаты» перед началом остальных методов, но это кажется излишним и не исправляет его. – Rob

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

Вы, кажется, как вы пропускаете на некоторых Java (и ООП в целом) именовании здесь.

Guest Rob = new Guest("Rob"); Роб, поскольку имя переменной не должно быть заглавным.

this.guestname = n; Несколько слов используют соглашение о верблюде, т. Е. guestName. Кроме того, вам не нужно ссылаться на this.guestName, вы можете просто сказать guestName. Вам нужно будет использовать только this.guestName, если параметр, принятый методом, также был назван guestName, то есть this.guestName = guestName. Также установите поле guestName на приватное.

+0

Привет, спасибо за ваш ответ! Разве это не создает новый объект комнаты с гостем в нем, а не связывает их? Или «новый номер (гость)» используется только для его ссылки? – Rob

+0

Это создает новый объект Room, потому что вы заявили, что хотите найти первое нулевое значение в массиве 'rooms'. Если вы имели в виду «найти первый объект« Комната »в массиве' rooms', член гостя которого равен NULL », то другой ответ имеет хорошее предложение для этого. –

+0

Да, вот что я имел в виду. Извинения за путаницу. – Rob

Смежные вопросы