如何编写Java Cricket类中void类型的retirePlayer球员退役方法
原代码问题梳理
你目前写的retirePlayer方法逻辑错误主要有三点:
- 没有提前判断目标球员的退役状态,不管什么情况都直接把对应位置的值改为-1,不符合需求要求
- 校验逻辑完全错误:你写的判断条件是查找数组里有没有值等于入参id的元素,和「判断对应id的球员是否已经退役」的要求完全不匹配
- 多余的循环逻辑:
playerIds数组的下标就对应球员id,不需要遍历整个数组就能直接读写对应位置的状态值
正确实现代码
@Override public void retirePlayer(int id) { // 校验id合法性,避免数组越界(如果题目要求不需要校验可以删掉这部分) if (id < 0 || id >= playerIds.length) { System.out.println("无效的球员id"); return; } // 已经退役的情况 if (playerIds[id] == -1) { System.out.println("Player already retired"); } // 未退役的情况 else { playerIds[id] = -1; System.out.println("Player with id: " + id + " has retired"); } }
逻辑说明
构造方法里已经把playerIds所有元素初始化为1,代表所有球员初始都是现役状态,-1代表退役状态。方法执行逻辑如下:
- 首先校验传入的id是否在0-10的合法范围内(数组长度为11,下标从0开始),避免抛出数组越界异常
- 直接通过
playerIds[id]拿到对应球员的状态,若已经是-1则直接打印已退役提示 - 若状态为1代表现役,将状态修改为-1后打印退役成功提示
内容的提问来源于stack exchange,提问作者Martsoft Filmz
相关产品推荐
相关产品推荐

