Java项目中Dog/Monkey列表打印十六进制代码问题求助
解决Java中打印Dog/Monkey列表显示哈希码的问题
你看到的Dog@42a57993这类输出是Java默认的对象字符串表示,来自Object类的toString()方法,它只会输出类名加对象的哈希码。要显示对象的实际属性,必须在Dog和Monkey类中正确重写toString()方法。
1. 为Dog类添加toString()方法
在你的Dog类中添加以下方法,把所有属性拼接成可读的字符串:
public class Dog { // 此处保留Dog类已有的成员变量、构造方法和getter/setter @Override public String toString() { return "Dog{" + "name='" + getName() + '\'' + ", breed='" + getBreed() + '\'' + ", gender='" + getGender() + '\'' + ", age='" + getAge() + '\'' + ", weight='" + getWeight() + '\'' + ", acquisitionDate='" + getAcquisitionDate() + '\'' + ", acquisitionCountry='" + getAcquisitionCountry() + '\'' + ", trainingStatus='" + getTrainingStatus() + '\'' + ", reserved=" + isReserved() + ", inServiceCountry='" + getInServiceCountry() + '\'' + '}'; } }
2. 为Monkey类添加toString()方法
Monkey类包含物种、尾长等额外属性,需要在toString中一并体现:
public class Monkey { // 此处保留Monkey类已有的成员变量、构造方法和getter/setter @Override public String toString() { return "Monkey{" + "name='" + getName() + '\'' + ", gender='" + getGender() + '\'' + ", age='" + getAge() + '\'' + ", weight='" + getWeight() + '\'' + ", acquisitionDate='" + getAcquisitionDate() + '\'' + ", acquisitionCountry='" + getAcquisitionCountry() + '\'' + ", trainingStatus='" + getTrainingStatus() + '\'' + ", reserved=" + isReserved() + ", inServiceCountry='" + getInServiceCountry() + '\'' + ", species='" + getSpecies() + '\'' + ", tailLength='" + getTailLength() + '\'' + ", height='" + getHeight() + '\'' + ", bodyLength='" + getBodyLength() + '\'' + '}'; } }
3. 验证效果
当你再次运行菜单选项4或5时,System.out.println(dogList)或System.out.println(monkeyList)会自动调用每个元素的toString()方法,输出每个动物的完整属性信息,而非哈希码。
额外小修复
你的intakeNewMonkey方法中,调用scanner.nextBoolean()后未清除输入缓冲区的换行符,会导致后续scanner.nextLine()读取空字符串,建议补充一行:
System.out.println("Is this monkey reserved?"); boolean reserved = scanner.nextBoolean(); scanner.nextLine(); // 添加此行,清除换行符 System.out.println("Which country is the monkey in service?"); String inServiceCountry = scanner.nextLine();
内容的提问来源于stack exchange,提问作者Jweese1220
相关产品推荐
相关产品推荐

