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循环返回吗?任何帮助将不胜感激!
答案 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语句,这很常见(即搜索数组时)。
- 丹