在这种情况下,有哪些方法可以存储和恢复数字?

时间:2013-03-07 04:05:48

标签: java arrays list simulator

所以我将运行一个玩掷骰子的模拟器。

我的任务要求我运行sim 10,000,000次。

这些都不是问题;我有SIM卡,我知道如何运行,我知道如何创建所需的变量。

我不确定的是,我应该如何存储每场比赛的结果?

我最终需要找到的是:

每场比赛的平均卷数 游戏中的最大卷数 需要超过30卷的游戏数量 胜利数量 损失数量 胜利的概率 最长的胜利序列和最长的损失序列

一切都很简单,我只是不确定如何存储10,000,000个数字,然后轻松访问它们。

例如第一个: 平均卷数 我应该创建一个包含10,000,000个项目的arraylist吗?在每个游戏结束时添加一个项目,然后将它们全部加起来除以10,000,000?

我意识到这应该有用,我只是想知道是否有另一种方式,或者更好(更有效)的方式。

这个问题的新部分: 我可以从方法中返回多个值吗?目前,模拟运行10,000,000次并且每次返回赢或输。但我还需要它来返回每场比赛的掷骰数...否则我无法弄清楚平均卷数和最高数量的卷数以及超过30卷的游戏数量。

这里有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您可以随时计算统计数据而不存储它们。例如,如果您在班级中拥有“平均”字段,则在每次模拟average = ((number of rolls this game) + (total rolls so far)) / (number of games so far)之后。其他统计数据也可以这样做。

答案 1 :(得分:1)

您无需为所需的任何统计信息维护数组。

对于每场比赛的平均掷骰次数,只需保留一个变量,比如cumulativeNumberOfRolls;在每场比赛之后,只输出该游戏中的掷骰数并将其添加到该变量中。完成所有模拟后,只需将此值除以模拟总数(10,000,000)。

max。卷数,再次保留一个变量,比如maxRolls;在每场比赛之后,输出该游戏中的掷骰数并将其与此变量进行比较。如果此游戏中的掷骰数量较大,则只需使用新值更新maxRolls。尝试相同的方法 - 拥有一个变量并在每场比赛后更新它 - 以获得游戏的价值,这些游戏需要超过30次获胜次数损失数量。如果您遇到问题,我们可以在评论中讨论它们。

对于最长的输赢序列,您需要维护一堆变量:

  • 整体最长的胜利顺序
  • 整体损失最长的序列
  • 当前序列计数
  • 当前序列类型(指示当前序列是赢序列还是丢失序列)

以下是该方法的概述。 每场比赛结束后,将比赛结果与current sequence type进行比较。如果它们相同,例如当前游戏的结果是胜利并且当前序列类型也是胜利,那么只需更新current sequence count并继续下一个游戏。如果它们不同,您需要考虑两种情况,并为它们做一些稍微不同的事情。我会解释一下 - 当前游戏的结果是失败而current sequence type是胜利。在这种情况下,将current sequence countlongest win sequence overall进行比较,如果它(current sequence count)更大,则只需更新longest win sequence overall。在此之后,将current sequence type更改为丢失并将current sequence count设置为1。

为第二种情况扩展上述方法 - 当前游戏的结果是胜利而current sequence type是失败。如果您有澄清,请随时在评论中发回。

答案 2 :(得分:0)

嗯,你有一定数量的运行,所以你不妨使用一个数组而不是一个arraylist(更快)。在我看来,你实际上只需要两个总阵列:一个列出每个游戏的结果(可能是赢/输的真/假),另一个是该游戏中的滚动数。你在运行模拟时填写这些内容;然后你可以做一堆简单的数学运算,包括一个数组或另一个数组来获取你的统计数据。这对我来说似乎是最好的方式;如果没有太多的不必要的努力,我认为你不会提高效率。