Как использовать метод из другого класса? - PullRequest
0 голосов
/ 29 марта 2019

Я думаю, что мой метод настроен правильно, чтобы дать мне общее количество комнат, но он не скомпилируется. Где я ошибся?

public class Hotel {


    public static int singleRooms;
    public static int doubleRooms;
    public static int kingRooms;

    public Hotel(int numberSingleRooms, int numberDoubleRooms, int numberKingRooms) {
        singleRooms = numberSingleRooms;
        doubleRooms = numberDoubleRooms;
        kingRooms = numberKingRooms;
        }

    public static Hotel IvanHotel = new Hotel(1,3,5);


    int totalRooms = GetTotalRooms(IvanHotel);

    public static void main(String[] args) {
        System.out.println(totalRooms);
    }

}

public class GetTotalRooms {

    public static int totalRooms;

    public int GetTotalRooms(Hotel yourHotel) {

        totalRooms = Hotel.singleRooms + Hotel.doubleRooms + Hotel.kingRooms;

        return totalRooms;

    }


}

Что я должен изменить, чтобы заставить его компилироваться? Я получаю сообщение об ошибке «Не могу найти символ» и не знаю почему.

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Похоже, вы запутались с понятием static.Вы не можете получить доступ к нестатическим значениям из контекста static.

Этот код должен исправить ситуацию

public class Hotel { 
    //...
    static int totalRooms = GetTotalRooms.getRoomsCount(IvanHotel);
    //...     
} 

class GetTotalRooms { 

    public static int getRoomsCount(Hotel yourHotel) {
        totalRooms = Hotel.singleRooms + Hotel.doubleRooms + Hotel.kingRooms;

        return totalRooms;
    } 
} 

Если вы новичок, я бы предложил прочитать множество примеров кодови начнем с основных понятий.Не пропустите основные понятия.

0 голосов
/ 29 марта 2019

Вам нужно немного больше читать, чтобы понять, какова цель static и почему вы ее используете. То, как вы написали свой код, вы не можете вызывать нестатический метод статическим способом, вам сначала нужно создать экземпляр вашего GetTotalRooms, прежде чем вы сможете сделать это GetTotalRooms, так что в случае с вашим кодом вы бы написать это

//...
private GetTotalRooms getTotalRooms = new GetTotalRooms();
int totalRooms = getTotalRooms.GetTotalRooms(IvanHotel);
//...

или вы должны следовать тому, что сказал Док, и сделать метод вашим вызовом static.

Я бы также порекомендовал вам практиковать ваши соглашения об именах, сначала ваше имя класса звучит как имя метода, а затем у вас есть метод с точно таким же именем вашего класса, ваш класс Hotel в порядке, но GetTotalRooms класс это проблема,

id, скорее, назовите его как RoomsList, так как вы хотите вернуть общее количество комнат, которые у вас есть в Hotel

имена ваших классов должны ссылаться на Object, GetTotalRooms это не объект, это уравнение в вашем случае. Тогда имя вашего метода должно относиться к действию, и оно должно начинаться с символа в нижнем регистре, имя, которое вы выбрали для вашего метода, хорошо, оно точно говорит мне, что произойдет, когда я его вызову, просто начните с нижнего регистра так что это не будет похоже на класс.

Подробнее об этом можно прочитать здесь:

Кодирование как у Шекспира

и

DZone

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...