【问题标题】:Random Class not working on Android 4.1+随机类不适用于 Android 4.1+
【发布时间】:2013-02-19 23:05:57
【问题描述】:

这是我用来生成一组随机数字的代码:

...
        public boolean placeTreasure()  {
            randomGen = new Random();
            int[] treasureLoc = {0, 0};

            while (treasureLoc[0] < 2 || treasureLoc[1] < 2)    {
                treasureLoc[0] = randomGen.nextInt(rows - 2);
                treasureLoc[1] = randomGen.nextInt(columns - 2);
                System.out.println("" + treasureLoc[0] + ", " + treasureLoc[1]);
            }
            maze[treasureLoc[0]][treasureLoc[1]] = '*';

            return true;
        }
...

有趣的是,它在早期版本的 Android 上运行良好。据我所知,4.1 以上的任何东西都不能正常运行。它不断地给我一对0, 0。这让我相信 4.1+ 不支持随机类,或者我的实现发生了其他奇怪的事情。不过,这种方法在早期版本上工作得很好,所以我不确定发生了什么。

如果有人对此的替代实现有建议(我需要在2rowscolumns 之间生成随机整数)。

【问题讨论】:

  • 这段代码调用时行和列的值是多少?你把它们打印出来确定吗?为什么要在方法内部重新创建一个 Random 对象,而不是简单地创建一次?为什么要有while循环?为什么不简单地获取randomGen.nextInt(rows - 2) + 2 并类似地获取其他号码?
  • 你不想给每个都添加2,而不是进入一个循环重试直到找到0rows-2之间的随机数?
  • @HovercraftFullOfEels 行和列可以是任何东西。是的,我正在打印它们以确保。我不是在重新创建一个 Random 对象,我只这样做一次。好主意。但这仍然不能解决 Random 类不起作用的问题。

标签: java android random


【解决方案1】:

如果有人对此的替代实现有建议(我需要在 2 和行或列之间生成随机整数)。

是的,非常简单:

int randomRow = randomGen.nextInt(rows - 2) + 2;
int randomCol = randomGen.nextInt(columns - 2) + 2;

【讨论】:

  • 谢谢,但是 Random 类不起作用的问题仍然存在。它不断返回 0。虽然我很愚蠢,但是关于摆脱循环的好建议。如果你能解决我真正的问题,那将非常有帮助。谢谢。
  • @capcom:我有 99.9999% 的把握确定该错误在您的代码中,而不是在 Android 的 Random 实现中。您向我们展示的内容不足以让我们能够解决它,但如果您进行更认真的调试,我敢打赌您会找到的。
  • 我认为你是对的!我想我给 Random 生成器的参数是 1。我真傻。非常感谢!
  • @capcom:不客气,很高兴你发现了这个错误!请注意,我上面的评论并不是在侮辱你。我发现每当我认为错误是由 Java 引起的时,99.9999% 的时间我都错了,而且错误在于我对 Java 的理解。我想你的几率是相似的。
  • 我绝不会认为有人的帮助有任何侮辱性。我是一个业余程序员,遇到这样的场景我只会变得更好。很高兴知道像您这样的人愿意花时间帮助他人。再次感谢。我在代码中修复了问题,一切正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-08
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多