这是我的作业:
Random r = new Random(); public int get100RandomNumber() { return 1+r.nextInt(100); }
您将获得一个名为getrand100()的预定义函数(上面),该函数返回一个整数,该整数是1到100之间的一个随机数。您可以根据需要多次调用此函数,但是请注意,此函数会占用大量资源。您不能使用任何其他随机生成器。您 无法 更改的定义getrand100()。 输出:以随机顺序打印数字1-20。(不是20个随机数)
您将获得一个名为getrand100()的预定义函数(上面),该函数返回一个整数,该整数是1到100之间的一个随机数。您可以根据需要多次调用此函数,但是请注意,此函数会占用大量资源。您不能使用任何其他随机生成器。您 无法 更改的定义getrand100()。
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; } }
谢谢你的帮助!
我相信您在问如何使用随机数生成器以随机顺序打印数字1到20。这也称为“随机排列”。所述费-耶茨洗牌是这样的算法。
但是,要实现该算法,您首先需要一个随机数生成器,该生成器可以以相等的概率从N个项目中选择一个,其中N的范围从2到要洗牌的集合的大小,而您只有一个可以选择的项目每100个项目中有一个概率相同。这可以通过模运算和“重新滚动”的组合轻松获得。