如何在锦标赛中生成比赛我有一个锦标赛,正在添加参与者。有一场比赛应由两名参与者组成。如何从比赛中吸引参与者并从中产生比赛。
@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<>();
锦标赛比赛
@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;
我不明白解决问题的算法。
我有一个比赛参与者名单 您是否需要成对分配它们并将它们添加到比赛中?还是您需要创建一种仅将两个参与者添加到比赛中的方法?
答案 0 :(得分:0)
在列表中添加所有参与者。遍历该列表并一次选择2个参与者,并为其创建匹配项。您可以将所有匹配项合并到一个列表中,并将其存储为历史记录。您可以通过删除丢失比赛的参与者(直到只剩下一名参与者)来过滤参与者的列表。该参与者可以成为赢家。
答案 1 :(得分:0)
匹配算法取决于您要执行的操作。最简单的方法是随机配对参与者(将参与者列表随机排序,然后配对)。您可能有一个遗留的参与者,可以从中删除一个“再见”比赛,也可以省略。
更复杂的是“种子”参与者(按技能顺序或添加到锦标赛的顺序),然后将最高种子与最低种子配对,第二高种子与第二最低种子配对,等等。
我不确定我是否会完全遵循您的问题,但我认为你们都需要一个将参与者配对的函数,并且我需要将他们添加到比赛中并保持比赛的方法。
后续问题将是: