随机抽奖号码有帮助吗?

时间:2011-04-29 01:26:06

标签: java

import java.util.Random;
import java.util.Scanner;

class Lottery {

    private int lotteryNumbers[];


    public int [] lotteryPicks() {

        lotteryNumbers = new int[499];
        for (int i = 0; i < lotteryNumbers.length; i++) {
            lotteryNumbers[i] = (int) (Math.random() * 55) + 1;
        }
     return lotteryNumbers;
}

该程序(并非所有显示的方法)使用户输入6个数字(5个数字和1个兆字节),并将它们与计算机生成的6个随机数进行比较,以查看某人赢得彩票的可能性。我的问题在于lotteryPicks()方法。这是我不知道如何创建6个随机数n次(比如500)的问题?理想情况下,它会生成6个数字,例如12,14,45,32,25,17,并且下一次生成6个新数字,直到有500组数字。还有,你能以for循环返回吗?任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

您可以将lotteryNumbers声明为二维数组,第一个维度表示您所在的数字集合,第二个维度是六个数字中的每一个。

private int lotteryNumbers[][] = new int[500][6];

是的,你可以在for循环中返回。此外,您应该声明Random变量并调用nextInt(..),而不是现在使用的方法,这需要您投射结果。

答案 1 :(得分:1)

您的简单(Math.random() * 55) + 1可能会返回42, 42, 42, 42, 42, 42。彩票通常不允许重复该号码。 (每个球一个数字,每个球一个球;一旦球掉出滚筒,这个数字就不能重现。)你应该生成一个55个数字的数组,随机重新排序数组,然后从数组中选择前六个元素。

有两个常见的shuffling algorithms,一个只是用随机数装饰每个数字,对该随机数进行排序,然后在完成后删除随机数(一个特定的技巧实例称为Perl圈子中的 Schwartzian变换,Python圈子中的 Decorate-Sort-Undecorate ,Ruby圈子中的 sort_by 等)。另一种算法是一个很好的选择,但是没有经验的程序员可能会在实现它时出现微妙但非常大的错误。

  

另外,你能以for循环返回吗?

是的,你可以,但这通常表明使用了错误类型的循环。 :)

有时从for循环的中间返回是最有意义的,但通常重新写入while() { }循环或do { } while ()循环更有意义。如有疑问,请尝试编写两种变体,然后选择最清楚的变体。

答案 2 :(得分:0)

所以你可以做Bala R所建议的并返回List<List<int>>,其中外部列表​​包含所有600张“门票”,内部列表保存票证中的数字。

但是,从面向对象的角度来看,创建一个包含6个数字的Ticket类会更好,有很多方法可以做到这一点 - 这是我的(伪未测试)代码:

public class Ticket 
{
    private int[] numbers;

    public Ticket()
    {
        numbers = new int[6];

        for(int i=0; i < numbers.length; i++)
        {
             numbers[i] = (int) (Math.random() * 55) + 1;
        } 
    }

    // Provide some public methods for comparing the ticket and what not

}

然后在你的主程序中 - 你可以创建一个600(左右)票的列表,例如:

public ArrayList<Ticket> generateTickets
{
    ArrayList<Ticket> retVal = new ArrayList<Ticket>();

    for(int i=0; i < TICKETS_TO_GENERATE; i++)
    {
        retVal.add(new Ticket());
    }

    return retVal;
}

然后,完成后,您可以使用Ticket类上的公共方法进行比较/等。

要回答你的问题,你可以在for中放一个return语句,这很常见(即搜索数组时)。

- 丹