这是我的家庭作业:
Random r = new Random();
public int get100RandomNumber() {
return 1+r.nextInt(100);
}
您将获得一个名为getrand100()(上图)的预定义函数 返回一个整数,它是1-100中的一个随机数。你可以打电话 这个功能可以多次,但要注意这个功能 是资源密集型的。你不能使用任何其他随机 发电机。您无法更改
getrand100()
的定义。输出:以随机顺序打印数字1-20。 (不是20个随机数)
我尝试了什么..
public class MyClass {
static Random r = new Random();
static HashSet<Integer>;
public static void main(String args[]) {
myMethod();
System.out.println(s);
}
public static void myMethod() {
boolean b = false;
s = new HashSet<Integer>();
int i = getRand100();
if (i >= 20)
i = i % 20;
int j = 0;
int k, l;
while (s.size() <= 20)
{
System.out.println("occurence no" + ++j);
System.out.println("occurence value" + i);
b = s.add(i);
while (!b) {
k = ++i;
if(k<=20)
b = s.add(k);
if(b==true)
break;
if (!b) {
l = --i;
if(i>=1&&i<=20)
b = s.add(l);
if(b==true)
break;
}
}
}
System.out.println(s);
}
public static int getRand100()
{
return r.nextInt(100) + 1;
}
}
感谢您的帮助!
答案 0 :(得分:2)
我相信您在询问如何使用随机数生成器以随机顺序打印数字1到20。这也称为“随机排列”。 Fischer-Yates shuffle就是这样一种算法。
但是,要实现该算法,首先需要一个随机数生成器,它可以从N个项中选择一个具有相同概率的项,其中N的范围从2到设置的大小为shuffle,而你只有一个可以选择100个项目中的一个,概率相等。这可以通过模运算和“重新滚动”的组合轻松获得。
答案 1 :(得分:1)
假设您被允许使用ArrayList
类,我建议您填写一个包含所需数字的列表(在本例中为1到20),然后从列表中随机选择数字并将其删除。对getRand100() % theList.size()
使用{{1}}应该足够随机,您只需要调用它19次。当只剩下一个元素时,不再需要从列表中“随机”选择它。 ; - )
答案 2 :(得分:0)
我相信我已经想出了一种方法来转换1到n之间的任何数字! (假设项目数已知)为n项的唯一排列。
从本质上讲,这可以实现&#34;立即&#34;整个套牌的随机化,而不必使用任何改组算法。目前,它运行在O(n ^ 2)并且需要使用BigInteger软件包(即Java或Javascript),但我正在寻找优化运行时的方法(尽管如此,老实说,2500次迭代无论如何都不算什么)。无论如何,当给出至少226位有效的随机数据时,该函数能够在10毫秒内生成52个整数的混洗数组。
该方法类似于用于将十进制数转换为二进制数(连续除以2等)的方法。我很乐意根据要求提供我的代码;我觉得有趣的是我之前没有遇到它。