我想问一下如何在我的按钮中生成不重复的数字。我想生成一个不重复的数字,因为每当我运行我的项目时它会显示所有相同的数字。
以下是我的代码:
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]);
我想知道如果可能的话,如何设置一个,两个和三个按钮没有相同的值。
答案 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);
要仔细检查您是否获得相同的随机数,您只需要一些逻辑来检查它是否已经生成。您可以坚持使用您的阵列并在下次通话前删除该号码。或者,如果您使用min
和max
,请在再次拨打电话之前检查存储的整数。
答案 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;
}