Java 无法从静态上下文引用非静态方法toString()
不需要任何代码,只需要一些指导。我希望保持我的学术诚信;) 我老是犯那个讨厌的错误。我需要为每个房间实例调用toString方法。有什么建议吗?如果可能的话,我希望在2小时内得到答复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
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添加了一些有价值的东西?在重新回答这样一个老问题之前,先想一想。