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:配列全体をループするのではなく、roomsRentedカウントに達すると終了するため、for-eachループではなく、標準のforループを使用する必要があります。

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 に答える