5

不需要任何代码,只需要某种指导。想保持我的学术诚信;)

我不断收到那个烦人的错误。我需要为每个 Room 实例调用 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());
    }
}
4

4 回答 4

4

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

例如

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 循环,因为您不会循环整个数组,而是会在达到 roomsRented 计数时退出。

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]);
}
于 2012-11-24T03:57:35.760 回答
0

由于错误已经说明,请勿在静态上下文中调用实例方法。

房间是一个类,而不是一个对象。toString 是一个实例方法。所以 Room.toString() 在这种情况下编译器会寻找一个静态方法 toString。但是 toString 是一个实例方法,所以它会导致问题。

永远记住实例方法是用类的对象调用的,而不是类本身。

于 2012-11-24T04:01:42.733 回答
0

您可能正在做的是调用toString()课堂房间,而不是它的实例。例如,不要写:

Room.toString()

写:

Room r = new Room()
r.toString()
于 2012-11-24T04:02:33.540 回答
0

看下面的代码,你可以用静态变量编译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)
于 2016-07-03T04:31:02.707 回答