如何用Java编写团队调度程序

时间:2011-06-23 02:43:09

标签: java scheduling

我想有人给我一些想法如何用Java编写这个程序。我不希望别人为我编写代码,但指导我如何启动以及应该使用哪些方法/设计来完成此程序。我是Java的新手,这对我来说是一个编程实践。

我对该计划的想法是一个简单的团队调度计划,它允许用户进入众多团队并为每个团队生成计划。在时间表中,每个团队只会互相对抗一次。

e.g。 4支球队

  

第1组与第2组相比   第3队与第4队   ------------------------
  1队与3队   第2队与第4队   ------------------------
  第1队与队伍4   第2队与第3队

我的问题是我应该使用数组存储所有团队吗?我应该如何生成计划(使用Random类)?如何确保每个团队一次,而不是多次?

非常感谢。

3 个答案:

答案 0 :(得分:1)

1)实施细节:等一下。您不知道如何接近逻辑解决方案。

2)每支球队必须在锦标赛中与其他球队比赛的事实是确定性的。完全取决于您如何在一段时间内分发游戏。例如,给定团队每天连续多少场比赛?给定一组规则,当然你可能然后选择一个随机选择给定n个插槽的选择(或者你可以选择......中的第一个项目[见答案#1])。 / p>

3)Read up on permutations and combinations如果此材料对您来说是新的。

答案 1 :(得分:0)

您应该拥有一个Team对象,其中包含有关团队的数据。每个团队的一个团队对象。拥有一个Match对象可能也很有用,您可以在其中传入两个Team对象,以便它们可以相互对抗。您可以在Team和Match对象之外编写一个方法来自动生成在比赛中竞争的团队。

我会使用Team对象的ArrayList,然后如果你想随机匹配,只需生成两个随机数,这些数字将成为ArrayList中的一个索引。您可以使用Math.random()或Random类,无关紧要。这两个数字不应该相同,否则一个团队会自己玩,这是没有意义的。您应该能够在此代码中计算出算法。

希望这有帮助。

答案 2 :(得分:0)

以下是一些基本想法:

当然你需要一个Team对象。而且你需要一个Schedule对象。然后我会从Design Patterns一书中推荐几个实现选择。一种是使用Builder模式。您将拥有ScheduleMaker,然后您可以拥有不同的混凝土构建器。例如,在足球比赛中,有关于时间表的规则:每支球队将对其分区中的每个同伴进行2场比赛。通常,不同的混凝土建筑商用于提供不同的物理差异。例如,在Go4书中,示例是MazeBuilder,其中简单和复杂的实现包含不同数量的门,大厅等。在您的情况下,您可能希望有不同的面向规则的方法来制定计划。对于我给出的示例,您可以将一个名为“setupDivisionalGames”的方法推送到界面中,然后您可以使用不在分区内的随机选择的竞争对手来填充剩余的计划。 (Builder通常是buildA,buildB ... getProduct()。)

如果这开始听起来像另一种模式,那么更简单的实现就是只有一个策略模式来挑选对手。如果你没有像上面这样的规则,那么一个简单的随机策略将是一个很好的默认实现,如果你想获得更多的花哨,你可以单独测试一个新的实现,不改变其他代码并获得新的时间表。

最后,考虑一下基于分数的方法的可能性。这就是NFL的工作方式。如果你是底特律雄狮队,那么你的日程安排会比你今年赛季的包装工队更加轻松。无论是建造者还是策略都可以让你轻松做到这样的事情:球队的相对得分必须接近所有对手的平均得分,就像那样。