我正在尝试创建一个彩票号码生成器。它将询问用户他们想要玩多少游戏然后创建一个随机选择的数字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();
}
}
答案 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;在你的构造函数中只有一次(你每次运行游戏时都不需要新的数字,对吗?)