3

尝试在 Java 中返回 1 到 42 之间的 5 个随机数。

我目前有返回单个数字的逻辑(将其放入 ArrayList,但我想取消它。)我很难实现返回 5 个随机数。我需要 5 个 for 循环吗?

    for (int i = 0; i < 10; i++) {
        int r = (int) (Math.random() * 42 + 1);
    }

我在这里看到了一些其他相关的例子,它们似乎比我的需要更复杂。但是,我可能是错的。

4

7 回答 7

2

只需将每个随机数放入一个数组并返回该数组...

public int[] powerBalls() {
     int[] balls = new int[5];
     for (int index = 0; index < 5; index++) {
          balls[index] = (int) (Math.random() * 42) + 1;
     }
     return balls;
}
于 2013-04-10T04:11:32.493 回答
2

您可以使用Set生成5 唯一随机数。

Random random = new Random();
Set randomNumbers = new HashSet<Integer>();
while(randomNumbers.size()< 5) {
    randomNumbers.add(random.nextInt(42)+1);
}

既然您提到您正在使用ArrayList将保存所有随机数的 an,您可以将 set 中存在的所有元素添加randomNumbers到您的ArrayList.

更新:-

为了满足您的需求,您需要执行以下操作:-

Random random = new Random();
Set<String> set = new HashSet<String>();
while(set.size()< 5) {
    set.add(String.valueOf(random.nextInt(42)+1));
}
fortuneList3.addAll(set);
于 2013-04-10T04:28:22.153 回答
1

当心!每个号码只能取一次。使用您的解决方案,可以多次获得相同的数字。

其他解决方案(在这里你不能多次使用相同的数字)是创建包含所有数字的数组,将其打乱并取前 5 个:

public int[] powerBalls() {
  // create array with all numbers
  List<Integer> balls = new ArrayList<Integer>(42);
  for (int i = 1; i <= 42; i++)
    balls.add(i);

  // shuffle
  Collections.shuffle(balls);

  // take first 5
  int[] result = new int[5];
  for (int i = 0; i < 5; i++)
    result[i] = balls.get(i);

  return result;
}
于 2013-04-10T04:30:03.280 回答
0

这是一种直截了当的方法。

   List<Integer> generated = new ArrayList<Integer>();
          for (int i = 0; i < 5; i++)
          {
              while(true)
              {
                 int r = (int) (Math.random() * 42 + 1);
                  if (!generated.contains(r))
                  {            
                      generated.add(r);
                      break;
                  }
              }
          }
于 2013-04-10T04:32:40.417 回答
0

试试这样:

IntArray = new int[5]; //Create an array
for (int i = 0; i < 5; i++) {
        IntArray[i] = (int) (Math.random() * 42 + 1);
}
于 2013-04-10T04:12:15.807 回答
0

将数字存储在数组中并返回该数组。

int []randArray;
randArray = new int[5];

for (int i = 0; i < 5; i++) { //for 5 random numbers
        randArray[i] = (int) (Math.random() * 42 + 1);
    }

//now return this array "randArray"
于 2013-04-10T04:13:32.130 回答
0

只需投入 2 美分。我最近制作了一个 jQuery 插件,恰当地命名为“强力球”。我将与您分享我正在使用的公式以及链接您我的插件。不知道为什么有人真的需要这个。我这样做只是为了好玩!哈哈!

功能

function getNumbers() {
    var a=[];   //  array to return
    for(i=1;5>=i;i++){  //  for loop to get first 5 numbers
        var b = Math.floor(Math.random()*59)+1; //  set #
        while (a.indexOf(b) > -1) { b = Math.floor(Math.random()*59)+1; }   //  reset # if already used
        a.push(b);  //  add number to array
    }
    a.push(Math.floor(35*Math.random())+1); //  add ball 6 number
    return a;   //  0 index array will have a length of 6, [0-4] being whiteball numbers, [5] being the red ball
}

插件

jsFiddle

  • 包含注释行之间的插件
  • 显示示例使用

使用就像$("element").powerball(). 但是,目前只有一种方法存在,$("element").powerball("setNumbers"). 该方法只是重置 p 标签中显示的数字。

  • 风格:注意!
    • 所有样式都是通过在初始化时添加到标题中的样式标记来完成的。这意味着不需要添加额外的文件,但它也使自定义样式变得容易。在jsFiddle中查看更多关于样式的信息!
于 2013-05-16T18:32:56.367 回答