我希望有人能给我一些如何用Java编写这个程序的想法。我不想让人们为我编写代码,但要指导我如何开始,以及应该使用什么方法/设计来完成这个程序。我是Java新手,这对我来说是一次编程实践
我对这个程序的想法是一个简单的团队调度程序,它允许用户进入多个团队,并为每个团队生成时间表。在时间表中,每支球队只会对战一次。
例如4个团队
第一队vs第二队
第三队vs第四队
------------------------
第一队vs第三队
第二队对第四队
------------------------
第一队vs第四队
第二队vs第三队
我的问题是,我应该使用数组来存储所有团队吗?我应该如何生成时间表(使用Random类)?我如何才能确保每支球队都会对战一次,而不是多次?
非常感谢。
1)实现细节:请稍等。你不知道自己是如何找到合乎逻辑的解决方案的。
2) 事实上,每支球队都必须在锦标赛中与其他球队比赛,这是决定性的。完全取决于你如何在一段时间内分发游戏。例如,一支球队每天连续打多少场比赛?给定一组特定的规则,自然地,您可以然后在给定一个插槽的n个选项的情况下选择随机选择(或者您可以只选择..中的第一个项目[参见答案#1])。
3) 如果这些材料对你来说是新的,请阅读排列和组合。
以下是一些基本想法:
当然,您需要一个Team对象。您需要一个Schedule对象。然后,我将推荐《设计模式》一书中的几个实现选项。一种是使用Builder模式。你会有一个ScheduleMaker,然后你可以有不同的混凝土建设者。例如,在足球比赛中,有关于时间表的规则:每支球队将与所在赛区的每一位同行进行2场比赛。通常使用不同的混凝土构建器来提供不同的物理差异。例如,在Go4的书中,例子是一个MazeBuilder,其中简单和复杂的实现包含不同数量的门、大厅等。在您的情况下,您可能希望有不同的面向规则的方式来制定时间表。对于我举的例子,你可以将一个名为"setupDivisionalGames"的方法推到界面中,然后你可以用随机选择的非赛区对手来填充时间表的其余部分。(生成器通常是buildA、buildB…getProduct()。)
如果这听起来像是另一种模式,那么一种更简单的实现方式就是只使用一种策略模式来挑选对手。如果你没有像上面这样的规则,那么一个简单的随机策略将是一个很好的默认实现,如果你想变得更花哨,你可以只对一个新的实现进行单元测试,不更改其他代码,并获得新的时间表。
最后,考虑一下采用基于分数的方法的可能性。这就是NFL的运作方式。如果你是底特律雄狮队,你的日程安排会比下个赛季的包装工队更轻松。无论是Builder还是Strategy,你都可以很容易地做到这一点:球队的相对得分必须接近所有对手的平均得分,诸如此类。
您应该有一个Team对象,它保存有关团队的数据。每个团队一个团队对象。有一个Match对象也可能很有用,你可以在其中传入两个Team对象,这样他们就可以相互对抗。您可以在Team和Match对象之外编写一个方法,以自动生成在比赛中竞争的团队。
我会使用团队对象的ArrayList,然后如果你想要随机匹配,只需生成两个随机数,这将是ArrayList中的索引。你可以使用Math.random()或random类,没关系。这两个数字不应该是相同的,否则一支球队会自己比赛,这是没有意义的。您应该能够从中计算出代码中的算法。
希望这能有所帮助。