Java 无法从静态上下文引用非静态方法toString()

Java 无法从静态上下文引用非静态方法toString(),java,Java,不需要任何代码,只需要一些指导。我希望保持我的学术诚信;) 我老是犯那个讨厌的错误。我需要为每个房间实例调用toString方法。有什么建议吗?如果可能的话,我希望在2小时内得到答复 public class Hotel { //constant public static final int NUM_ROOMS = 20; //variables public Room[] theRoom; public String name; public

不需要任何代码,只需要一些指导。我希望保持我的学术诚信;)

我老是犯那个讨厌的错误。我需要为每个房间实例调用toString方法。有什么建议吗?如果可能的话,我希望在2小时内得到答复

public class Hotel
{
    //constant
    public static final int NUM_ROOMS = 20;

    //variables
    public Room[] theRoom;
    public String name;
    public int totalDays;
    public double totalRate;
    public int singleCount;
    public int doubleCount;
    public int roomsRented;
    public int NOT_FOUND;

    public Hotel(String newName) {
        name = newName;
        Room[] Rooms = new Room[NUM_ROOMS];
    }

    public double getTotalRentalSales() {
        return totalRate + roomsRented;
    }

    public double getAvgDays() {
        return roomsRented/totalDays;
    }

    public double getAvgRate() {
        return totalRate/roomsRented;
    }

    public int getSingleCount() {
        return singleCount;
    }

    public int getDoubleCount() {
        return doubleCount;
    }

    public String printRentalList() {
        System.out.println("Room Information: " + Room.toString());
    }
}

您不应该尝试在Room类上调用
toString()
,而应该在Room对象上调用。在该方法中,使用for循环遍历房间数组,并为数组中的每个房间对象打印通过调用
toString()
返回的字符串,因为这看起来是您的方法应该做的

比如说

System.out.println("All Foos held here include: ");

// using a "for-each" loop, assuming an array called fooArray that holds Foo objects
for (Foo foo: fooArray) {
   System.out.println(foo);
}
显然,您必须更改代码的类型和变量名

编辑2:尽管您必须使用标准for循环,而不是for each循环,因为您不会在整个数组中循环,而是在达到roomsrerent计数时退出

System.out.println("All Foos held here include: ");

// using standard for loop, assuming an array called fooArray that holds Foo objects
for (int i = 0; i < someMaxNumber; i++) {
   System.out.println(fooArray[i]);
}
System.out.println(“此处保存的所有foo包括:”);
//使用标准for循环,假设一个名为fooArray的数组包含Foo对象
for(int i=0;i
由于错误已经存在,请不要在静态上下文中调用实例方法

房间是一个类,不是一个对象。toString是一种实例方法。因此,在本例中,编译器将查找静态方法toString。但是toString是一个实例方法,所以它会引起一个问题


请始终记住,实例方法是用类的对象调用的,而不是用类本身调用的。

您可能在教室中调用的是
toString()
,而不是它的实例。例如,不要写:

Room.toString()
写:

Room r = new Room()
r.toString()

看看下面的代码,您可以使用静态变量编译toString,而不需要新对象,它只在运行时抛出异常

demo>cat Test.java 
class Water {
  public String toString() {return "whatever";}
}

public class Test { 
  static Water water;
  public static void main(String...args) {
    System.out.println(water.toString());
  }
}

demo>javac Test.java 
demo>java Test
Exception in thread "main" java.lang.NullPointerException
    at Test.main(Test.java:8)

1+不要求代码解决方案。这是正确的态度!但有一件事——请不要提“截止日期”和类似的问题。请注意:1)你在向志愿者寻求帮助,因此不应该急于向他们施压;2)你的问题得到好答案的速度通常与问题的质量直接相关。To whit:它有需要回答的信息吗?它容易阅读吗?+1表示很棒的用户名:D(但说真的,为了回答。)@满是鳗鱼的气垫船我还在努力lol…。显然我在这方面比较新lol。谢谢你的时间和耐心=D@user1848879:不客气。继续尝试,继续试验。顺便说一句,下次我一定会忽略截止日期=)这就是我目前的情况:@Hovercraft Full Od Eels sigh我无法正确发布代码。。。。我一直在代码的“System.out.println(Room[I]);”行中得到一个“找不到符号”。(我已经决定放弃toString方法,这样我至少可以完成代码lol。有什么建议吗?很久以前已经有人接受了答案。你的答案是否为OP添加了一些有价值的东西?在重新回答这样一个老问题之前,先想一想。