处理android中的随机数

时间:2013-08-27 16:09:36

标签: java android random

我想问一下如何在我的按钮中生成不重复的数字。我想生成一个不重复的数字,因为每当我运行我的项目时它会显示所有相同的数字。

以下是我的代码:

int arr1[]={1,2,3,4,5,6,7,8,9,10};
int num=(int)(Math.random()*10);
    one.setText(""+arr1[num]);
    two.setText(""+arr1[num]);
    three.setText(""+arr1[num]);

我想知道如果可能的话,如何设置一个,两个和三个按钮没有相同的值。

3 个答案:

答案 0 :(得分:3)

您的代码几乎等同于:

int arr1[]={1,2,3,4,5,6,7,8,9,10};
int num = arr1[(int)(Math.random()*10)];
one.setText(""+num);
two.setText(""+num);
three.setText(""+num);

这就是为什么你看到相同数字的3倍。

您应该使用Random#nextInt(int n)代替您的数组并生成3个随机数:

Random r = new Random();
one.setText(Integer.toString(1 + r.nextInt(10)));
two.setText(Integer.toString(1 + r.nextInt(10)));
three.setText(Integer.toString(1 + r.nextInt(10)));

如果您希望您的数字不重复,您可以使用Set:

Random r = new Random();
Set<Integer> randomNumbers = new HashSet<Integer>();
while(randomNumbers.size() <= 3){
  //If the new integer is contained in the set, it will not be duplicated.
  randomNumbers.add(1 + r.nextInt(10));
}
//Now, randomNumbers contains 3 differents numbers.

答案 1 :(得分:1)

在android中你可以像这样生成一个随机数。如果需要,您可以使用min和max而不是数组。

int min = 1;
int max = 10;
Random r = new Random();
int someRandomNo = r.nextInt(max - min + 1) + min;
one.setText(""+someRandomNo);

要仔细检查您是否获得相同的随机数,您只需要一些逻辑来检查它是否已经生成。您可以坚持使用您的阵列并在下次通话前删除该号码。或者,如果您使用minmax,请在再次拨打电话之前检查存储的整数。

答案 2 :(得分:0)

private int previous = -1000; // Put a value outside your min and max

/**
 * min and max is the range inclusive
 */
public static int getRandomNumber(int min, int max) {

    int num;

    do {

        num = min + (int)(Math.random() * ((max - min) + 1));

    } while(previous == num); // Generate a number that is not the same as previous

    previous = num;

    return num;    
}