好的,我有一个简单的数组,我正在使用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
答案 0 :(得分:5)
Java没有任何神奇地知道如何以字符串格式表示类的机制。这就是你必须自己实现的原因。
您需要覆盖toString()方法以获得“corect”值
class House {
//your code
@Override
public String toString() {
return "The string representation";
}
}
答案 1 :(得分:0)
在示例中打印像house [0]这样的实例时,会看到toString方法的结果。如果您的类中没有覆盖House toString,则会看到默认实现,该实现显示实例的类名和对象ID。因此,如果您想要House实例的一些自定义字符串表示,您可以覆盖类House中的toString()方法。你可以在那里显示成员变量的值等
你的for循环从0迭代到2,所以你的i假定为0,1,2而你的System.out语句打印i + 3导致3,4,5
答案 2 :(得分:0)
房屋[0]只是一个参考&amp;它不是对象本身。只是指出对象。所以,写:
houses[0].getValues();
public String getValues() { return "" + x + "" + y }
或房屋对象的正确方法。
答案 3 :(得分:0)
在您的语句中,您将String
与House
对象连接起来。因此,它会调用toString()
的{{1}}方法并替换其结果。
由于您可能没有覆盖此方法,因此它使用默认的House
方法,该方法打印类名和对象引用。
只需覆盖toString()
课程中的toString()
方法:
House
答案 4 :(得分: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);
}
}