Java 将内容添加到列表中,使每个列表的大小均匀

Java 将内容添加到列表中,使每个列表的大小均匀,java,minecraft,bukkit,Java,Minecraft,Bukkit,我正在创建一个名为UHC(Ultra Hard Core)的Minecraft Bukkit插件,并计划添加团队。我想要它,这样你就可以选择你所在的团队,但如果你不这样做,它会自动将你加入一个团队 一个队的最小球员数是2人,最大球员数是4人。例如,有红色、蓝色和绿色。 红色有2个,蓝色有1个,绿色有4个,这会将它们添加到蓝色中 无论如何要这样做?首先,我将创建一些玩家和团队对象(您可能已经有类似的东西了) 一支球队只是一张球员名单。当有至少2名球员时,我们会认为它是“完整的”,当有4名球员时,我

我正在创建一个名为UHC(Ultra Hard Core)的Minecraft Bukkit插件,并计划添加团队。我想要它,这样你就可以选择你所在的团队,但如果你不这样做,它会自动将你加入一个团队

一个队的最小球员数是2人,最大球员数是4人。例如,有红色、蓝色和绿色。 红色有2个,蓝色有1个,绿色有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);
    }
}