小编典典

使用随机数生成器对整数进行随机排列

algorithm

这是我的作业:

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;
    }
}

谢谢你的帮助!


阅读 2003

收藏
2020-07-28

共1个答案

小编典典

我相信您在问如何使用随机数生成器以随机顺序打印数字1到20。这也称为“随机排列”。所述费-耶茨洗牌是这样的算法。

但是,要实现该算法,您首先需要一个随机数生成器,该生成器可以以相等的概率从N个项目中选择一个,其中N的范围从2到要洗牌的集合的大小,而您只有一个可以选择的项目每100个项目中有一个概率相同。这可以通过模运算和“重新滚动”的组合轻松获得。

2020-07-28