Java彩票号码

时间:2015-02-25 22:11:07

标签: java loops while-loop

我正在做一个像彩票一样的小程序。关键是将产生7个生成的数字,彼此不同(第七个数字除外)。我的代码是这样的:

import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class LotteryNumbers {

public static void main(String[] args) {

    Random generator = new Random();
    Set<Integer> seen = new HashSet<Integer>();
    int index = 1;
    int luckyNumber = generator.nextInt(49);

    while (index < 7) {
        if (seen.contains(luckyNumber)) {
            continue;
        }
        seen.add(luckyNumber);
        System.out.println("Number " + index + ": " + luckyNumber); 
        index++;
        luckyNumber = generator.nextInt(49);
    }
    System.out.println("Bonus Number :" + generator.nextInt(49));
}

}

正如你所看到的,我创建了一个名为see的集合,其中存储了生成的所有数字。但是,程序无法正常工作,因为循环有时会意外停止。我的错是什么?

谢谢。 :)

3 个答案:

答案 0 :(得分:1)

如果您输入if,您将陷入无限循环 - 不会生成新数字,并且在循环的每次迭代中都会评估相同的数字,{{1}输入了。

解决此问题的一种方法是在这种情况下生成另一个数字:

if

答案 1 :(得分:1)

当Set包含所选的幸运数字时,您似乎进入了无限循环,因为您从未重置luckyNumber

while (index < 7) {
    if (seen.contains(luckyNumber)) {
        continue;
    }

这应该是:

while (index < 7) {
    if (seen.contains(luckyNumber)) {
        luckyNumber = generator.nextInt(49);
        continue;
    }

您应该研究如何使用调试器,您很可能会通过单步执行代码来识别错误。

答案 2 :(得分:0)

试试这个,我的简化方法:

Set<Integer> seen = new HashSet<Integer>();

while (seen.size() < 7) {
    int luckyNumber = generator.nextInt(49);
    seen.add(luckyNumber);
}
System.out.println(seen); 

它应该有用。