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

Java跨Game与Player类为私有hoursPlayed列表追加游玩时长的实现方法

代码修正与功能实现

现有代码基础编译问题排查

  • Java关键字class为小写写法,原代码中public Class Game、public Class Player的写法会直接触发编译错误
  • Player类中hoursPlayed属性缺少泛型声明,存储整数游玩时长需指定泛型为Integer
  • Player类构造方法中赋值语句变量名不匹配,方法参数为playerNumber,原代码写为number会触发符号找不到的编译报错

功能实现逻辑

  1. 因hoursPlayed是Player类的私有属性,禁止直接从Game类或外部修改,需在Player类中提供专属公开写入方法,封装列表追加逻辑,匹配管理员操作的权限控制要求
  2. 在Game类中提供管理员操作的匹配查找逻辑:通过唯一标识playerNumber定位目标玩家,避免因重名导致时长加错账号
  3. 管理员操作入口直接对接已开发完成的游玩时长生成逻辑,找到对应玩家后调用Player的写入方法完成追加

修正后可运行代码

import java.util.ArrayList;
import java.util.List;

public class Game {
    private List<Player> players;

    public Game(){
        players = new ArrayList<>();
        players.add(new Player("Random Name", 20));
        players.add(new Player("Random NameTwo", 200));
    }

    // 管理员操作入口:传入目标玩家编号、本次生成的游玩时长
    public boolean addPlayTimeForAdmin(int targetPlayerNumber, int playTime) {
        // 遍历匹配目标玩家
        for (Player player : players) {
            if (player.getPlayerNumber() == targetPlayerNumber) {
                player.addSinglePlaySession(playTime);
                return true;
            }
        }
        // 未匹配到玩家返回操作失败标识
        return false;
    }

    // 主方法测试逻辑
    public static void main(String[] args) {
        Game gameInstance = new Game();
        // 示例:管理员给编号20的玩家追加本次生成的45分钟游玩时长
        boolean operateResult = gameInstance.addPlayTimeForAdmin(20, 45);
        System.out.println("操作执行结果:" + operateResult);
    }
}

class Player {
    // 明确泛型为Integer,存储每次独立游玩的时长记录
    private List<Integer> hoursPlayed = new ArrayList<>();
    private String name;
    private int playerNumber; 

    public Player(String name, int playerNumber){
        this.name = name;
        this.playerNumber = playerNumber;
    }

    // 封装游玩时长追加逻辑,外部无法直接修改列表内容
    public void addSinglePlaySession(int playDuration) {
        this.hoursPlayed.add(playDuration);
    }

    // 提供只读访问方法供Game类匹配玩家
    public int getPlayerNumber() {
        return playerNumber;
    }

    // 可选:计算玩家累计总游玩时长,方便管理员核对数据
    public int getTotalPlayTime() {
        return hoursPlayed.stream().mapToInt(Integer::intValue).sum();
    }
}

开发注意事项

  • 不要将Player类的hoursPlayed列表设为public暴露,否则会绕过管理员操作逻辑产生非法数据修改
  • 玩家匹配逻辑优先使用唯一标识playerNumber,不要用姓名匹配,避免重名操作失误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 21:15:02