我有以下代码:
import java.util.*;
public class Room {
ArrayList<Bed> beds = new ArrayList<Bed>();
private int BedNumber;
public void createBed(boolean isDouble) {
beds.add(new Bed(isDouble));
BedNumber++;
}
public int howManyBeds() {
return BedNumber;
}
public static void main(String[] args) {
Room p = new Room();
p.createBed(true);
p.createBed(false);
Bed test = p.beds.get(0);
System.out.println(test);
}
}
public class Bed {
private boolean isDouble;
public Bed(boolean isDouble) {
this.isDouble = isDouble;
}
public String bedSize() {
if (isDouble) {
return "Double Bed";
} else {
return "Single Bed";
}
}
}
当我编译它时,Eclipse通知我代码中存在错误并询问我是否要继续。当我这样做时,我最终得到一个完全出乎意料的输出 - Bed @ 14ae5a5
我对可能造成这种情况的原因感到困惑。我想它有点简单,但我只是没有看到它。
任何人都能看到我失踪的东西吗?
更新----
发现我在下面更正的错误。我正在打印对象引用而不是调用方法...
现在打印正确的结果,然而,Eclipse仍然告诉我编译时出了问题。
我的代码写得不好吗?任何人都可以确定Eclipse为什么不开心?
答案 0 :(得分:0)
您的编译错误是由于您尝试在一个Java文件中声明两个公共类。
对于输出,您正在尝试打印Bed对象 - 这会导致打印Object.toString()。
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
因此,它打印了类的名称“Bed”,带有@符号后跟其散列的十六进制值14ae5a5。
答案 1 :(得分:0)
println
System.out
方法实际调用参数的toString
方法,在本例中为床。但是,toString
课程中不存在Bed
!那它做了什么?它调用toString
Object
方法,返回Bed@XXXX
,其中XXXX是您床位的记忆位置。
要解决此问题,只需在您的课程中添加toString
方法即可。请务必添加@Override
以覆盖toString
Object
方法
@Override
public String toString () {
//return a string representation here
}