0

好的,所以我有一个简单的数组,我正在用 Java 处理。问题是,当我运行程序时,我得到的是对象的地址而不是实际值。我也看到循环/数组有问题。它应该显示房屋 3、5 和 7,但底部显示的是 3,4 和 5。我哪里出错了?请参阅下面的代码和控制台输出。提前致谢!

House[] houses = new House[3];

houses[0] = new House(3,4);
houses[1] = new House(5,7);
houses[2] = new House(7,2);

System.out.println("Number of bottles in house number 3 is: " + houses[0]);
System.out.println("Number of bottles in house number 5 is: " + houses[1]);
System.out.println("Number of bottles in house number 7 is: " + houses[2]);

for (int i = 0; i < houses.length; i++){
  System.out.println("Number of bottles in house " + (i + 3 ) + " is " + houses[i]);
}

控制台输出:

3号房子的瓶子数量是:org.com1027.lab3.House@d16e5d6

5号房子的瓶子数量是:org.com1027.lab3.House@5a4b4b50

7号房的瓶子数量是:org.com1027.lab3.House@53d9f80

房子 3 中的瓶子数量是 org.com1027.lab3.House@d16e5d6

房屋 4 中的瓶子数量为 org.com1027.lab3.House@5a4b4b50

房子 5 中的瓶子数量是 org.com1027.lab3.House@53d9f80

4

5 回答 5

5

Java 没有任何机制可以神奇地知道您的类应该如何以字符串格式表示。这就是为什么你必须自己实现它的原因。

您需要覆盖 toString() 方法以获得“正确”值

class House {
 //your code

 @Override 
 public String toString() {
   return "The string representation";
 }

}
于 2013-10-24T18:08:39.893 回答
0

在您的语句中,您将 aString与一个House对象连接起来。因此,它将调用toString()方法House并替换其结果。

由于您可能没有覆盖此方法,因此它使用默认toString()方法,该方法打印类名和对象引用。

只需覆盖类toString()中的方法House

public class House {
   // ...

   @Override
   public String toString() {
       return "House: "; // Customize it!
   }

   // ...
}
于 2013-10-24T18:12:29.183 回答
0

你想要的是toString()在你的类中覆盖House

class House {
    // ... your implementation, 
    // which I'm guessing it's something like this:
    private int number;
    private int bottles;

    public House(int number, int bottles) {
        this.number = number;
        this.bottles = bottles;
    }

    // here you say what you want as output if you print a House, e.g.:
    @Override 
    public String toString() {
        return String.valueOf(bottles);
    }
}
于 2013-10-24T19:11:39.257 回答
0

当您在示例中打印类似 house[0] 的实例时,您会看到 toString 方法的结果。如果在您的类 House toString 中没有被覆盖,您会看到默认实现,它显示类名和实例的对象 ID。因此,如果您想要一些自定义字符串表示您的 House 实例,您可以覆盖类 House 中的 toString() 方法。在那里,您可以例如显示成员变量的值等。

您的 for 循环从 0 迭代到 2,因此您的 i 假定为 0,1,2 并且您的 System.out 语句打印 i+3 导致 3,4,5

于 2013-10-24T18:11:40.537 回答
0

house[0] 只是一个参考,而不是对象本身。只需点对象即可。所以,写:

houses[0].getValues();

public String getValues() { return "" + x + "" + y }

或房屋对象的正确方法。

于 2013-10-24T18:11:45.813 回答