You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Cat类的两个技术实现求助:随机初始年龄与说话增龄

Cat类需求解决方案

以下是针对两个任务的实现方案,附带修改后的完整代码:

任务1:初始随机年龄与防覆盖处理

  • 初始化逻辑:在构造函数中直接生成5到10之间的随机整数作为初始年龄,替代原代码中this.age = null的写法,确保猫实例创建时就拥有合法初始年龄。
  • 防覆盖处理:修正setAge方法的逻辑——原方法会无视传入参数强制生成随机数,必然覆盖已有年龄;现在改为仅接受合法的非负数字作为年龄值,非法输入会触发警告,避免意外覆盖初始随机年龄。如果需要完全禁止修改年龄,可在setAge中添加判断,仅当this.age未初始化时允许设置。

任务2:每5次speak调用年龄加1

  • 添加私有计数器#speakCount,用于记录speak方法的调用次数(私有字段可防止外部篡改计数)。
  • 每次调用speak时,计数器自增,当计数达到5的倍数时,将猫的年龄加1,可添加日志提示年龄变化。

修改后的完整代码

class Cat {
  name;
  age;
  #speakCount = 0; // 私有计数器,记录speak调用次数

  constructor(name) {
    this.setName(name || "Norman");
    // 初始化5-10之间的随机年龄
    this.age = Math.floor(Math.random() * 6) + 5;
  }

  getName() {
    return this.name;
  }

  getAge() {
    return this.age;
  }

  setName(name) {
    this.name = name;
  }

  setAge(age) {
    // 仅接受合法的非负数字作为年龄,避免意外覆盖
    if (typeof age === 'number' && age >= 0) {
      this.age = age;
    } else {
      console.warn('请传入有效的非负数字作为年龄');
    }
  }

  speak(sound) {
    this.sound = sound;
    this.#speakCount++;
    // 每调用5次speak,年龄加1
    if (this.#speakCount % 5 === 0) {
      this.age++;
      console.log(`${this.name}叫了5次,长大1岁啦,现在年龄是${this.age}`);
    }
  }
}

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:05:28