ArrayList彩票游戏

时间:2014-09-03 18:28:38

标签: java arraylist

我正在尝试创建一个彩票号码生成器。它将询问用户他们想要玩多少游戏然后创建一个随机选择的数字1-49的彩票。每个游戏都将被存储。一旦创建了所有游戏,它就会将其打印出来。现在我遇到的问题是游戏没有按照我想要的方式复制到ArrayList中。目前,它将它们全部放入元素中,然后复制该元素" numberOfGames"倍。我很确定它与for循环有关,但我仍然坚持这一部分。

public class LotteryTicket {

ArrayList<Integer> Numbers;
ArrayList<Integer> Lottery;
ArrayList<ArrayList<Integer>> Games;


LotteryTicket(){
    Lottery = new ArrayList<Integer>();
    Numbers = new ArrayList<Integer>();
    Games = new ArrayList<ArrayList<Integer>>();
}

public ArrayList<Integer> Numbers(){
    for(int i = 0; i < 49; i++){
        Numbers.add(i);
    }
    Collections.shuffle(Numbers);
    return Numbers;
}
public void Generate(int numberOfGames){
    for (int i = 0; i < numberOfGames; i++){
        Numbers();
        for(int x = 0; x < 6; x++){
            Lottery.add(Numbers.get(x));                
        }
        Collections.sort(Lottery);
        Games.add(Lottery);
    }
}

public void Display(){
    System.out.println(Games);
}
}

这是我的测试员:

public class Picker {

private static int numberOfGames;

public static void main(String[] args){
    System.out.println("Please enter the amount of games you would like to play");
    Scanner in = new Scanner(System.in);
    numberOfGames = in.nextInt();
    LotteryTicket q = new LotteryTicket();
    ArrayList<ArrayList> game= new ArrayList<ArrayList>();
    q.Generate(numberOfGames);
    q.Display();
}
}

2 个答案:

答案 0 :(得分:1)

您需要为每次迭代实例化彩票。

试试这个: -

public void Generate(int numberOfGames){
    for (int i = 0; i < numberOfGames; i++){
        Numbers();
        Lottery = new ArrayList<Integer>();
        for(int x = 0; x < 6; x++){
            Lottery.add(Numbers.get(x));                
        }
        Collections.sort(Lottery);
        Games.add(Lottery);
    }
}

编辑: -

你也可以避免使用相同的Numbers集合场景,并且对于性能,你可以只在构造函数中初始化Numbers集合中的1到49个数字,并且对于你的generate方法中的每个游戏迭代,你可以随意改组数字和然后将其添加到彩票。这避免了不必要的数字添加到Numbers集合

LotteryTicket(){
    Lottery = new ArrayList<Integer>();
    Numbers = new ArrayList<Integer>();
    Games = new ArrayList<ArrayList<Integer>>();
    Numbers(); // call this once from constructor as the total numbers in the Numbers collection is fixed which is from 1 to 49.
}

public ArrayList<Integer> Numbers(){
    for(int i = 0; i < 49; i++){
        Numbers.add(i);
    }
    Collections.shuffle(Numbers);
    return Numbers;
}
public void Generate(int numberOfGames){
    for (int i = 0; i < numberOfGames; i++){
        Collections.shuffle(Numbers); // shuffle the numbers for every game
        Lottery = new ArrayList<Integer>(); // create a new Lottery ticket
        for(int x = 0; x < 6; x++){
            Lottery.add(Numbers.get(x));                
        }
        Collections.sort(Lottery);
        Games.add(Lottery);
    }
}

答案 1 :(得分:0)

我看到的主要问题是你没有在游戏中清空你的号码和彩票阵列,导致之前的数字已经存在。

试试这个:

public void Generate(int numberOfGames){
    for (int i = 0; i < numberOfGames; i++){
        Numbers();
        for(int x = 0; x < 6; x++){
            Lottery.add(Numbers.get(x));                
        }

        //reset the array the numbers array so we can re add numbers after.
        Numbers.clear();
        Collections.sort(Lottery);
        Games.add(Lottery);

        //reset the lottery array so we can have a new lottery after.
        Lottery.clear();
    }
}

这将是一个快速解决方案。为了更好的一个。尝试初始化您的&#34;数字&#34;在你的构造函数中只有一次(你每次运行游戏时都不需要新的数字,对吗?)