首先,我是一名新手Android App开发者。在我的应用程序中,我需要一个在给定范围内生成随机数的类,以避免重复。我已经搜索了很多这个问题,但我没有找到任何具体的解决方案。嗯,以为我发现了一个我稍微重读的东西,但它没有正常工作。代码如下:
public class NoRepeatRandom {
private int[] number = null;
private int N = -1;
private int size = 0;
public NoRepeatRandom(int minVal, int maxVal)
{
N = (maxVal - minVal) + 1;
number = new int[N];
int n = minVal;
for(int i = 0; i < N; i++)
number[i] = n++;
size = N;
}
public void Reset() { size = N; }
// Returns -1 if none left
public int GetRandom()
{
if(size <= 0) return -1;
int index = size * (int)Math.random();
int randNum = number[index];
// Swap current value with current last, so we don't actually
// have to remove anything, and our list still contains everything
// if we want to reset
number[index] = number[size-1];
number[--size] = randNum;
return randNum;
}
}
当我调用GetRandom()时,我没有达到预期的结果,因为它总是返回给定范围的最小数量。例如:
NoRepeatRandom nrr = new NoRepeatRandom(0, 10);
int yes = nrr.GetRandom();
//Here I create a Toast just to see the numbers that the method is returning.
Toast toast = Toast.makeText(MainActivity.this, Integer.toString(yes), Toast.LENGTH_SHORT);
toast.show();
结果是:0,0,0,0,0,0 .... 对于范围(5,10),结果是5,5,5,5 ....
有人知道代码有什么问题吗?我真的很感激任何帮助!
提前谢谢。
答案 0 :(得分:2)
我想这一行是个问题。
int index = size * (int) Math.random();
此评估始终为零。
修改强>
只是整合来自Jeroen Vannevel和OP的评论。
Math.random()将返回介于0.0和1.0之间的值,当使用(int)
进行转换时,将始终求值为零。你可以使用如下。
int index = (int) (size * Math.random());
答案 1 :(得分:1)
您应该尝试使用Random
类:
http://developer.android.com/reference/java/util/Random.html
Random random = new Random();
int randomNo = random.nextInt(10); // 0 to 9