簡體   English   中英

無法從 static 上下文中引用非靜態方法 toString()

[英]non-static method toString() cannot be referenced from a static context

不需要任何代碼,只需要某種指導。 想保持我的學術誠信;)

我不斷收到那個煩人的錯誤。 我需要為每個 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());
    }
}

您不應該嘗試在 Room 類上調用toString() ,而是在 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]);
}
System.out.println(Arrays.toString(arr));

在這一行中,當你寫 arrays 時,會出現一個下拉菜單,在那里你會看到默認的 package 或java.util package。你需要 select java.util 884373

由於錯誤已經說明,請勿在靜態上下文中調用實例方法。

房間是一個類,而不是一個對象。 toString 是一個實例方法。 所以 Room.toString() 在這種情況下編譯器會尋找一個靜態方法 toString。 但是 toString 是一個實例方法,所以它會導致問題。

永遠記住實例方法是用類的對象調用的,而不是類本身。

您可能正在做的是在類 Room 上調用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM