计算随机的尝试

时间:2017-03-20 04:27:19

标签: java

我需要制作一个代码,生成20个随机数,范围从0到20,条件是如果一个随机数与前一个重复,则计算该重复并将数字更改为一个未重复的数字重复。

我有这段代码:

int [] times = new int [21];
        int[] randoms = new int [21];
        for (int i = 0; i < 20; i++) {
            times[i] = 0;
            randoms[i]=(int)(Math.random()*21);
            //System.out.print(i);
            if(i>0){
                for (int j = 1; j < i+1; j++) {
                    while(randoms[i]==randoms[i-(j)] || randoms[i]==randoms[0]){

                        System.out.print(i+" , "+j+" "+(i-j)+" * "+randoms[i]);
                        System.out.println();
                        randoms[i] = (int)(Math.random()*21);

                        times[i]=1+times[i];
                    }
                }

            JOptionPane.showMessageDialog(null, randoms[i]+" "+times[i]);

但是,当我运行代码时,有一些随机数字会重复,就像“while”不存在一样。 我该如何解决这个错误?

1 个答案:

答案 0 :(得分:1)

这一行

randoms[i]=(int)(Math.random()*21);

不会在0 and 20之间生成一个数字。相反,你应该把它改成像这样的东西

randoms[i]=(int)((Math.random()*100)%21);

另一个问题是,如果您发现该号码正在重复,那么您将其替换为另一个随机数,您永远不会检查重新生成的号码是否重复,以检查它,您可以在重新生成随机数后再次设置j=0的值,然后返回for循环:

int [] times = new int [21];
int[] randoms = new int [21];
for (int i = 0; i < 20; i++) {
    times[i] = 0;
    randoms[i]=(int)((Math.random()*100)%21);
    //System.out.print(i);
    if(i>0){
        outerloop:
        for (int j = 1; j < i+1; j++) {
            while(randoms[i]==randoms[i-(j)] || randoms[i]==randoms[0]){

                System.out.print(i+" , "+j+" "+(i-j)+" * "+randoms[i]);
                System.out.println();
                randoms[i] = (int)((Math.random()*100)%21);

                times[i]=1+times[i];

                //recheck the entire loop again
                j=1;
                continue outerloop;
            }
        }

    JOptionPane.showMessageDialog(null, randoms[i]+" "+times[i]);