Java 将内容添加到列表中,使每个列表的大小均匀
我正在创建一个名为UHC(Ultra Hard Core)的Minecraft Bukkit插件,并计划添加团队。我想要它,这样你就可以选择你所在的团队,但如果你不这样做,它会自动将你加入一个团队 一个队的最小球员数是2人,最大球员数是4人。例如,有红色、蓝色和绿色。 红色有2个,蓝色有1个,绿色有4个,这会将它们添加到蓝色中Java 将内容添加到列表中,使每个列表的大小均匀,java,minecraft,bukkit,Java,Minecraft,Bukkit,我正在创建一个名为UHC(Ultra Hard Core)的Minecraft Bukkit插件,并计划添加团队。我想要它,这样你就可以选择你所在的团队,但如果你不这样做,它会自动将你加入一个团队 一个队的最小球员数是2人,最大球员数是4人。例如,有红色、蓝色和绿色。 红色有2个,蓝色有1个,绿色有4个,这会将它们添加到蓝色中 无论如何要这样做?首先,我将创建一些玩家和团队对象(您可能已经有类似的东西了) 一支球队只是一张球员名单。当有至少2名球员时,我们会认为它是“完整的”,当有4名球员时,我
无论如何要这样做?首先,我将创建一些玩家和团队对象(您可能已经有类似的东西了) 一支球队只是一张球员名单。当有至少2名球员时,我们会认为它是“完整的”,当有4名球员时,我们会认为“完全”。我们的团队类将实现compareTo,以便我们可以根据团队的大小对团队列表进行排序
public class Team implements Comparable<Team> {
private String name;
private List<Player> players;
public Team(String name) {
this.name = name;
this.players = new ArrayList<Player>();
}
public String getName() {
return name;
}
public List<Player> getPlayers() {
return players;
}
public int getSize() {
return players.size();
}
public boolean isFull() {
return (players.size() >= 4);
}
public boolean isComplete() {
return (players.size() >= 2);
}
public void add( Player player )
{
players.add(player);
}
@Override
public int compareTo(Team otherTeam) {
int thisSize = getSize();
int otherSize = otherTeam.getSize();
return (thisSize == otherSize) ? 0 :
(thisSize > otherSize) ? 1 : -1;
}
}
公共类团队实现了可比较的{
私有字符串名称;
私人名单玩家;
公共团队(字符串名称){
this.name=名称;
this.players=new ArrayList();
}
公共字符串getName(){
返回名称;
}
公共列表getPlayers(){
返回球员;
}
公共int getSize(){
返回玩家。大小();
}
公共布尔值isFull(){
返回值(players.size()>=4);
}
公共布尔值isComplete(){
返回值(players.size()>=2);
}
公共无效添加(玩家)
{
players.add(player);
}
@凌驾
公共int比较(团队其他团队){
int thisSize=getSize();
int otherSize=otherTeam.getSize();
返回值(thisSize==otherSize)?0:
(此尺寸>其他尺寸)?1:-1;
}
}
现在我们可以创建一些团队
List<Team> teams = new ArrayList<Team>();
teams.add( new Team("Red Team") );
teams.add( new Team("Blue Team") );
teams.add( new Team("Green Team") );
List teams=new ArrayList();
团队。添加(新团队(“红色团队”);
团队。添加(新团队(“蓝色团队”);
添加(新团队(“绿色团队”);
。。。还有一些球员。所有玩家都应该从“记事本”列表开始
List noteam=new ArrayList();
对于(int i=0;i<10;i++){
添加(新玩家(“玩家”+i));//创建一些玩家
}
要将一名球员加入球队。。。我们需要确定最小的未满团队。我们将列出所有未满的球队,然后按球员数量对其进行排序
for (Player player : noteam) { // add players to teams
List<Team> potentialTeams = new ArrayList<Team>();
for (Team team : teams) {
if (!team.isFull()) {
potentialTeams.add(team);
}
}
if (potentialTeams.isEmpty()) {
// cannot add player because all teams are full - we could do something about it here
break;
} else {
Collections.sort(potentialTeams);
Team smallestTeam = potentialTeams.get(0);
smallestTeam.add(player);
}
}
for(Player:noteam){//将玩家添加到团队
List potentialTeams=new ArrayList();
对于(团队:团队){
如果(!team.isFull()){
潜在团队。添加(团队);
}
}
if(potentialTeams.isEmpty()){
//无法添加球员,因为所有球队都满了-我们可以在这里做些事情
打破
}否则{
集合。排序(潜在团队);
团队最小团队=潜在团队。获取(0);
最小团队。添加(玩家);
}
}
这只是一种方法,也是一个例子。此外,这个答案并不是针对“Minecraft Bukkit插件”的。这很简单:
blue.add(player)代码>。完成。只需将播放器以最小大小添加到列表中……您喜欢您的阵列列表,对吗?:D学习使用变量接口而不是具体类型来增强兼容性。您的所有方法都无法处理其他列表类型(如LinkedList),因此,如果您希望使用LinkedList而不是ArrayList,则需要重构更多的列表类型。()这是一个很好的观点,汤姆,谢谢。而且你的团队
类错过了他的可比
接口:)。你不应该使用数组;)。
List<Player> noteam = new ArrayList<Player>();
for (int i = 0; i < 10; i++) {
noteam.add( new Player("Player " + i) ); // create some players
}
for (Player player : noteam) { // add players to teams
List<Team> potentialTeams = new ArrayList<Team>();
for (Team team : teams) {
if (!team.isFull()) {
potentialTeams.add(team);
}
}
if (potentialTeams.isEmpty()) {
// cannot add player because all teams are full - we could do something about it here
break;
} else {
Collections.sort(potentialTeams);
Team smallestTeam = potentialTeams.get(0);
smallestTeam.add(player);
}
}