我有一个生成随机数的函数'generateran'。此功能无法更改。

int generateRan() {
    Random num = new Random();
    return (1 + num.nextInt(100));
}

我必须编写代码:
随机打印数字1-20。
随机打印数字1-200。
每个号码只能打印一次。
函数可以使用任意次数但它有点重,所以我想使代码更优化。
以下是我的编码:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Test {

    public static void main(String[] args) {
        List<String> list = new ArrayList();
        Test t = new Test();
        iniList(list, 20);

        for (Integer i = ((t.generateRan()) % 20); list.size() > 0; i = 1+((t
                .generateRan()) % 20)) {
            if (list.contains(i.toString())) {
                list.remove(i.toString());
                System.out.println(i);
            }
        }

        System.out.println("********");

        iniList(list, 200);


        for (Integer i = ((t.generateRan()%2)*100 + t.generateRan()) ; list.size() > 0; i = ((t.generateRan()%2)*100 + t.generateRan())) {
            if (list.contains(i.toString())) {
                list.remove(i.toString());
                System.out.println(i);
            }
        }

    }

    private static void iniList(List list, int i) {
        for (Integer k = 1; k <= i; k++) {
            list.add(k.toString());
        }
    }

    int generateRan() {
        Random num = new Random();
        return (1 + num.nextInt(100));
    }

}

当前1-200的代码不正确。

最佳答案

每个号码只能打印一次
然后只需创建整个范围的List<Integer>,然后调用Collections.shuffle

private static void displayNumbers(int minInclusive, int maxInclusive) {
    List<Integer> list = new ArrayList<Integer>();
    for (int i = minInclusive; i <= maxInclusive; i++) {
        list.add(i);
    }
    Collections.shuffle(list);
    for (int value : list) {
        System.out.println(value);
    }
}

就我个人而言,我通常会使用minInclusive, maxExclusiveminInclusive, count的参数,但对于您的情况,这种方法可能更容易阅读。

关于java - 为该兰特发生器提出一些更优化的解决方案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10878039/

10-09 01:42