从指定的数字列表生成两个数字

时间:2016-08-04 03:59:22

标签: java random collections

我想在指定的数字列表中生成两个数字。我写了这段代码,但它不起作用。任何人都可以提出更好的解决方案吗?

public classl {

    public static void main(String[] args) {

        int[] lottery = new int[2];
        int randomNum;

        for (int i = 0; i < 3; i++) {
            randomNum = (int) (Math.random() * (3,9,25,41,43,50,68)); // Random     number created here.
            for (int x = 0; x < i; x++) {
                if (lottery[x] == randomNum) // Here, code checks if same random number generated before.
                {
                    randomNum = (int) (Math.random() * (3,9,25,41,43,50,68));// If random number is same, another number generated.
                    x = -1; // restart the loop
                }

            }
            lottery[i] = randomNum;
        }

        for (int i = 0; i < lottery.length; i++)
            System.out.print(lottery[i] + " ");
        }

    }
}

3 个答案:

答案 0 :(得分:0)

您可以将这些数字存储在如下数组中:

int[] arr = {12, 13, 4, 7, 9};

然后在 arr 数组中获取一个随机数:

int rndNumber = new Random().nextInt(arr.length);

这是你解决问题的一些想法。

答案 1 :(得分:0)

我想您正在询问如何从集合中选择给定数量的随机元素。

如果这是正确的,那么你最好从一个集合而不是一个数组开始,因为集合中有很好的方法可以帮助你。以下是一些可行的方法:

List<Integer> theNumbers = Arrays.asList(3, 9, 25, 41, 43, 50, 68);
Random random = new Random();

// using uniqueness of sets
Set<Integer> results = new HashSet<>();
while (results.size() < 2)
    results.add(theNumbers.get(random.nextInt(theNumbers.size()));

// using shuffle
Collections.shuffle(theNumbers);
List<Integer> results = theNumbers.sublist(0, 2);

// using streams (Java 8)
int[] results = random.ints(0, theNumbers.size())
    .map(theNumbers::get).distinct().limit(2).toArray();

还有很多其他方法,但希望这会让你开始。

答案 2 :(得分:0)

短跑运动员的回答是优雅的做法。如果你作为一个初学者很难理解它,下面的例子可以帮助你理解我们如何实现这个

Series

注意:我不鼓励使用int []来存储彩票号码。事实上,不要使用原始数组,而是使用java提供的集合,这些集合带有sprinter指向的许多实用方法。此解决方案旨在向您展示如何以您的方法倾向于

的方式完成此操作