Java彩票号码



我正在制作一个类似彩票的小程序。关键是将有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));
}
}

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

谢谢。:)

如果输入if,您将陷入一个无休止的循环中——不会生成新的数字,并且在循环的每次迭代中都会计算相同的数字,然后输入if

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

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

当Set包含所选幸运数字时,看起来就像进入了一个无限循环,因为您从未重置luckyNumber

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

这可能是:

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

您还应该研究如何使用调试器,您很可能会通过遍历代码立即识别出错误。

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

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

它应该起作用。

最新更新