与Java成对产生随机数

时间:2019-05-07 17:59:16

标签: java arrays random

我正在开发Java记忆游戏作为我的作业。我想在成对的盒子数量之间产生随机数1。

public void GenerateBoxesGrid(JPanel jp){
       jp.setLayout(new GridLayout(2,4));
       for (int i = 0; i < numberofboxes; i++) {
            int num = generator.nextInt(5);
            button[i] = new JToggleButton();
            button[i].setText(Integer.toString(num));
            button[i].setSize(1,1);
            jp.add(button[i]);
            button[i].setBackground(defaultColor);
            button[i].setVisible(true);

生成器对象正在生成随机数但没有成对的数字。例如,当用户想要6个框时,它在屏幕上应该是1,1,2,2,3,3。谢谢您的回答。

2 个答案:

答案 0 :(得分:1)

不,您不希望“成对的随机数”。

在1,1,2,2,3,3中只有3个“随机”数字:1、2和3。

换句话说:最简单的方法是生成三个随机数,并将每个数字使用两次。无需“配对”任何东西。只需创建 n 个随机数字,并为每个数字简单地创建两个按钮。当然,要使创建按钮更容易,可以执行以下操作:

  • 使用 n 个随机数创建列表/数组
  • 创建具有 n 个广告位的第二个列表,这是第一个列表的副本
  • 立即随机播放第二个列表
  • 最后:编写您的循环,并在循环中为每一行从每个列表中选择一个条目

我认为上述方法是生成这样的“对”表的“最简单”方法,这些表在表中随机放置。 (所有配对都在同一行中的记忆游戏并不是很有趣,你知道)

并提示:到目前为止您忘记的部分:您应该确保这些 n 随机数不同。或更准确地说:您应该考虑是否要允许1,1,2,2,1,1...。

最后:如果您想做一个“真实的”记忆难题,那么事情就会变成这样:

  • 创建n / 2个随机数,然后将每个值放入初始列表两次
  • 您随机排列初始列表
  • 现在:您迭代该初始列表,并使用您可以想到的 n 个成员填充任何网格(可以是n / 2行,每行2列,或者n行,每行例如只有1列)

答案 1 :(得分:0)

public List<Integer> generateNumbers(int count) {
  List<Integer> numbers = IntStream.range(1, count + 1 )
                                   .boxed()
                                   .collect(Collectors.toList());
  numbers.addAll(numbers);
  Collections.shuffle(numbers);
  return numbers;
}

1)生成数字范围

2)将所有生成的数字加倍

3)以随机方式随机播放

4)使用数组中的数字迭代并绘制单元格