java 不能从静态上下文引用非静态方法toString()

42fyovps  于 2023-03-06  发布在  Java
关注(0)|答案(6)|浏览(205)

不想要任何代码,只想要某种指导。想保持我的学术诚信机智;)
我一直收到这个烦人的错误。我需要为每个房间示例调用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());
    }
}
44u64gxh

44u64gxh1#

你不应该尝试在Room类上调用toString(),而应该在Room * 对象 * 上调用x1m0 n1 a。在该方法中,用for循环遍历房间数组,并打印通过为数组中的每个Room对象调用toString()返回的String,因为这看起来是你的方法应该做的事情。
例如

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]);
}
zhte4eai

zhte4eai2#

由于错误已经声明,不要在静态上下文中调用示例方法.
Room是一个类,而不是一个对象。toString是一个示例方法。因此,在本例中,Room.toString()编译器会查找一个静态方法toString。但toString是一个示例方法,因此会导致问题。
永远记住示例方法是用类的对象调用的,而不是用类本身。

vnjpjtjt

vnjpjtjt3#

你可能正在做的是在类Room上调用toString(),而不是它的一个示例。

Room.toString()

写:

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

5f0d552i4#

看看下面的代码,你可以用一个静态变量编译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)
dzhpxtsq

dzhpxtsq5#

System.out.println(Arrays.toString(arr));

当你写数组的时候,在这一行会出现一个下拉菜单,你会看到默认的包或者java.util包,你需要选择java.util包,问题就解决了。

a7qyws3x

a7qyws3x6#

当你调用classname.method()时,意味着你调用的是一个静态方法。我们使用类名来调用静态方法。
这里的类是:房间
方法为:toString()
toString()不是使用类名调用的静态方法。
toString()是Object类的方法。
因此,您应该使用room.toString(),其中“room”是Room类的对象

相关问题