Java简单彩票计划

时间:2015-02-04 12:44:41

标签: java arrays

我尝试创建一个简单的彩票计划。这是一个问题:它仍然打印相同的数字。例如,我输出了33 21 8 29 21 10。每当生成随机数时,代码会检查是否已生成该数字,然后它会创建一个新的随机数,但之后不会再次检查。我找不到办法做到这一点。

public static void main(String[] args)
{

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

    for (int i = 0; i < 6; i++)
    {
        randomNum = (int) (Math.random() * 50); //Random number created here.
        for (int x = 0; x < i; x++)
        {
            if (lottery[i] == randomNum) // Here, code checks if same random number generated before.
            {
                randomNum = (int) (Math.random() * 50);//If random number is same, another number generated.
            }

        }
        lottery[i] = randomNum;
    }

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

}

5 个答案:

答案 0 :(得分:7)

您正在检查时更改随机数。您需要选择一个随机数并检查它是否存在。

BTW较短的方法是使用随机播放。

// give me all the number 1 to 50
List<Integer> list = IntStream.range(1, 51).boxed().collect(Collectors.toList());
// shuffle them.
Collections.shuffle(list);
// give me the first 6
System.out.println(list.subList(0, 6));

答案 1 :(得分:7)

您的代码有两个问题:

  • 您检查lottery[i]randomNum是否相同,应该是lottery[x]
  • 当您重新生成随机数时,请不要将其与lottery中的第一个数字进行核对。

以下是更正后的版本:

public static void main(String[] args) {

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

    for (int i = 0; i < 6; i++) {
        randomNum = (int) (Math.random() * 50); // 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() * 50);// 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] + " ");

}

答案 2 :(得分:1)

一个简单的解决方案,介于第一个(非Java程序员可能非常抽象)和第二个(不确保数字列表的唯一性)之间。

    Collection<Integer> liste = new ArrayList<Integer>();
    for (int i = 0; i < 6; i++)
    {

        Boolean ap = false; 
        while (!ap)
        {
            Integer randomNumber  =  (int) (Math.random() * 50);

            if (! liste.contains(randomNumber)){

                liste.add(randomNumber);
                ap = true;
            }
        }
    }


    for (Integer liste1 : liste) {
        System.out.print(liste1+" ");

    }

答案 3 :(得分:0)

试试这个,它创造了12 x(45个中的6个)

public static void main(String[] args) {
    SecureRandom random = new SecureRandom();
    for (int i = 0; i < 12; i++){
        Integer[] tipp = new Integer[6];
        int n = 0;
        do {
            int r = random.nextInt(45) + 1;
            if (Arrays.asList(tipp).indexOf(r)<0){
                tipp[n]= r;
                n++;
            }
        } while (n<=5);
        Arrays.sort(tipp);
        System.out.println(Arrays.toString(tipp));
        }
}

答案 4 :(得分:0)

public static void main(String[] arg) {
    int[] lottery = new int[6];
    int randomNum;
    c1:
        for (int i = 0; i < 6; i++) {
            randomNum = (int) (Math.random() * 50); // Random number created here.
            if(randomNum == 0) {
                continue c1;
            }   
            for (int x = 0; x < i; x++) {
                if (lottery[x] == randomNum ) // Here, code checks if same random number generated before.
                {
                    randomNum = (int) (Math.random() * 50);// 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] + " ");

}