Java 在锦标赛中生成比赛

Java 在锦标赛中生成比赛,java,spring,algorithm,Java,Spring,Algorithm,如何在锦标赛中生成比赛我有一个锦标赛,参与者被添加到其中。有一场比赛应由两名参与者组成。如何从锦标赛中挑选参与者并从中生成比赛 @Entity public class Participant { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "participant_id") private int id; @NotNull @

如何在锦标赛中生成比赛我有一个锦标赛,参与者被添加到其中。有一场比赛应由两名参与者组成。如何从锦标赛中挑选参与者并从中生成比赛

@Entity
public class Participant {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "participant_id")
    private int id;

    @NotNull
    @Column(name = "nick_name")
    private String nickName;

    @JsonIgnore
    @ManyToOne
    @JoinColumn(name = "tournament_fk_id")
    private Tournament tournament;
*gets,Sets
比赛

@Entity
public class Tournament {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "tournament_id")
private int id;

@OneToMany(mappedBy = "tournament", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Set<TournamentMatch> tournamentMatchSet = new HashSet<>();

private String name;

@OneToMany(mappedBy = "tournament", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Participant> participantList = new ArrayList<>();
我不能理解解决这个问题的算法

我有一份参加比赛的名单
您需要将它们成对分发并添加到比赛中吗?或者您需要创建一个只向比赛中添加两名参与者的方法吗?

在列表中添加所有参与者。反复浏览列表,一次挑选2名参与者,并为其创建匹配项。您可以将所有匹配项合并到一个列表中,并将其存储为历史记录。通过删除输掉比赛的参与者,直到只剩下一个参与者,可以过滤参与者列表。该参与者可能是赢家。

匹配算法取决于您想做什么。最简单的方法是随机配对参与者(对参与者列表进行随机排序,然后配对)。你可能有一个剩余的参与者,你可以从中创建一个“再见”匹配,或者忽略它

更复杂的是“播种”参赛者(按技能顺序,或加入锦标赛的顺序),并将最高种子与最低种子配对,将第二高种子与第二低种子配对,等等

我不确定我是否完全理解了你的问题,但我认为你们都需要一个函数来配对参与者,我需要一个方法来将他们添加到匹配中并保持匹配

后续问题将是:

  • 你想要更多的比赛吗
  • 它们是否遵循特定的括号结构(即单淘汰或循环)
@Entity
@Table(name = "mach")
public class TournamentMatch {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "mach_id")
    private int id;

    @Column(name = "start_time")
    private LocalDate startTime;

    @Column(name = "finisch_time")
    private LocalDate finischTime;

    private BigDecimal scores;

    @JsonIgnore
    @ManyToOne
    @JoinColumn(name = "tournament_fk_id")
    private Tournament tournament;

    @OneToOne(optional = false, cascade = CascadeType.ALL)
    @JoinColumn(name = "participant_two_fk_id")
    private Participant participantTwo;

    @OneToOne(optional = false, cascade = CascadeType.ALL)
    @JoinColumn(name = "participant_one_fk_id")
    private Participant participantOne;