如何使用另一个类的方法?

时间:2019-03-29 02:02:56

标签: java cannot-find-symbol

我认为我已经正确设置了方法,可以为我提供房间总数,但无法编译。我哪里出错了?

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 个答案:

答案 0 :(得分:1)

好像您对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;
    } 
} 

如果您是初学者,我建议阅读大量示例代码并从基本概念入手。不要跳过基本概念。

答案 1 :(得分:0)

您需要多做一些阅读,以了解static的用途以及使用原因。在编写代码的方式中,不能以静态方式调用非静态方法,首先需要先创建GetTotalRooms的实例,然后才能进行GetTotalRooms,因此对于您要编写的代码

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

或者您应该遵循Doc所说的,并使该方法也成为您的调用static

我还建议您练习命名约定,首先,您的类名听起来像方法名,然后又有了一个与您的类名完全相同的方法,您的Hotel类很好,但是{ {1}}类是问题,

id最好命名为GetTotalRooms之类的名称,因为您要返回RoomsList中的房间总数

您的类名称应引用一个对象,Hotel不是一个对象,在您的情况下它是一个等式。然后,您的方法名称应引用一个动作,并应以小写字母开头,为您的方法选择的名称很好,它告诉我在调用它时会发生什么,只需使其以小写字母开头这样看起来就不会像一堂课。

您可以在此处了解更多信息:

Coding like Shakespeare

dzone