面向对象开发Java闲置骰子游戏时分数无法正确累加如何解决
问题定位
你代码的异常原因和setScore方法无关,问题出在addScore的实现逻辑:
- 每次调用
addScore时都会新生成一个McMurchyScore实例,每个新建实例的score属性默认初始值为0,因此每次执行give.setScore(sides)时,都是在0的基础上加上本次的sides值,最终表现就和sides直接覆盖了旧score一致,无法累加历史分数。
修复方案
核心要保证全程使用同一个McMurchyScore实例存储累计总分,可根据你的业务逻辑二选一实现:
- 将
McMurchyScore实例作为当前类的成员变量,仅初始化一次
// 在类的属性定义部分添加此行,仅初始化一次实例 private McMurchyScore give = new McMurchyScore(); public void addScore() { // 直接复用已初始化的实例更新分数,不要重复new对象 give.setScore(sides); }
- 如果
score本身就是当前类的成员属性,无需额外创建McMurchyScore对象,直接调用当前类的setScore方法即可
public void addScore() { this.setScore(sides); }
补充优化提示
你当前rollDice方法里把倍率mult固定写死为1,如果后续要实现骰子翻倍、道具加成类的功能,可以把mult调整为可动态修改的成员变量。
内容的提问来源于stack exchange,提问作者Ryder McMurchy
相关产品推荐
相关产品推荐

