【问题标题】:better way to make java do random stuff?让java做随机事情的更好方法?
【发布时间】:2016-10-19 00:54:23
【问题描述】:

事情就是这样。最近我一直在做一个类似人工智能的项目。我想要做的是,我将获得一个 0-300 之间的随机数,我必须根据该数字做一个随机的事情。

现在我可以使用了

switch(/*number b/w 0-300*/){
case 0:
case 1:
so on to 300

我已经尝试过 IF-Else 案例,显然它们比 switch 案例效率更低。

但我认为必须有更好的方法来做到这一点,因为制作这么多案例需要很长时间。

编辑:我想提一下,所有这些情况都是无效的,所以我不知道如何用列表来实现它们。而且我在 java 7 无法更改为 java 8,所以界面有点难以管理

【问题讨论】:

  • 随机事件有300个吗?还是只有选定数量的随机事件?
  • case 中发生的平均情况是什么?
  • 我不明白。您关心的是程序员时间(编写、测试和维护 300 个案例所花费的精力)还是执行时间(机器执行代码所花费的时间)?在后一种情况下——不用担心。 300箱不算什么。在前一种情况下——我们需要更多信息。困难的部分将是在每个案例中编写代码inside。有什么东西让你觉得你可以自动化吗?
  • 是否可以将它所做的所有随机事情都包装在类似的方法中(即相同数量和类型的 args 和返回值)?
  • @thvardhan 在人类看来效率低下的事物通常与对计算机而言效率高的事物没有直接关系。要知道您是否在浪费时间,您需要对解决方案进行基准测试,然后将其与其他解决方案的基准进行比较。由于 Java 已经做了很多运行时优化,因此对 Java 进行基准测试并不容易,但是很少有人能够可靠地查看一段代码并知道它是否比另一个更快或更慢,除非它使用不同的 big-O 模式。我建议编写代码以进行有效维护(易于预期的更改)。切换和 if / else 不是。使用列表

标签: java if-statement random switch-statement


【解决方案1】:

列出可供选择的东西

List<Choice> choices = new List<Choice>();
choices.add(something);
choices.add(somethingElse);
...
Choice random = choices.get(new Random().nextInt(choices.size()));

【讨论】:

  • 你能告诉我我该如何添加这个吗?我的意思是我所有的方法都是无效的,似乎每次我向这个列表中添加一个方法时我都必须创建一个对象。
  • 我无法将 void 方法添加到列表中,也无法创建 void 列表。 (请提供一些详细的代码)
  • 没关系我修好了..我完全忘了调用 list.get() 函数 xD
  • @thvardhan 我很高兴您找到了解决方案。感谢您的提问。
【解决方案2】:

您可以为所有“随机事物”定义一个接口:

interface AIAction {
    public void execute();
}

然后将所有这些操作的实现收集到一个数组中。我选择使用 lambda 实现每个 AIAction,但这最终取决于您:

static AIAction[] actions = new AIAction[] {
    () -> {System.out.println("a");},
    () -> {System.out.println("b");},
    () -> {System.out.println("c");}
};

之后,您可以像这样执行随机操作:

Random rand = new Random();
int index = rand.nextInt(actions.length);
actions[index].execute();

【讨论】:

    猜你喜欢
    • 2013-03-26
    • 1970-01-01
    • 2010-12-27
    • 2012-11-29
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    相关资源
    最近更新 更多