您好我如何避免获得重复的彩票#34;在我的代码中?
现在的问题是一切正常,排序,随机数,使它成为一个字符串。 问题是,如果我想要5张彩票,那么我将打印5张彩票
实施例
Lottery tickets:
--------------
[5, 13, 18, 22, 23, 23, 30]
[4, 7, 10, 12, 16, 26, 32]
[3, 5, 9, 22, 23, 25, 34]
[4, 5, 15, 18, 19, 19, 26]
[3, 3, 12, 14, 23, 26, 35] (Duplicate 3)
[5, 6, 12, 13, 14, 15, 26]
正如你所看到的,有重复的数字,我想避免这种情况,所以它总是随机的。我该如何避免这种情况?
import java.util.Arrays;
import java.util.Scanner;
public class Alt2 {
public static void main(String[] args) {
System.out.print("How many lottery tickets do u want?: \n");
Scanner svar= new Scanner(System.in);
int nr = svar.nextInt();
System.out.println("Lottery tickets: ");
System.out.println("--------------");
for(int i=0; i<nr; i++)
{
Alt2 t = new Alt2();
int[] lottoNummer = t.BubbleSort();
System.out.print(Arrays.toString(lottoNummer));
System.out.println();
svar.close();
}
}
private int[] getTicket(){
int[] lottoNummer = new int[7];
lottoNummer[0] = (int) ((35 * Math.random()) + 1);
lottoNummer[1] = (int) ((35 * Math.random()) + 1);
lottoNummer[2] = (int) ((35 * Math.random()) + 1);
lottoNummer[3] = (int) ((35 * Math.random()) + 1);
lottoNummer[4] = (int) ((35 * Math.random()) + 1);
lottoNummer[5] = (int) ((35 * Math.random()) + 1);
lottoNummer[6] = (int) ((35 * Math.random()) + 1);
return lottoNummer;
}
public int[] BubbleSort( )
{
int j;
boolean flag = true;
int temp;
Alt2 t = new Alt2();
int[] lottoNummer = t.getTicket();
while ( flag )
{
flag= false;
for( j=0; j < lottoNummer.length -1; j++ )
{
if ( lottoNummer[ j ] > lottoNummer[j+1] )
{
temp = lottoNummer[ j ];
lottoNummer[ j ] = lottoNummer[ j+1 ];
lottoNummer[ j+1 ] = temp;
flag = true;
}
}
}
return lottoNummer;
}
}
答案 0 :(得分:2)
你可以将一个排序的数字1到35放在一个arrayList中,随机播放它们,然后从列表中取出前7个数字。
//define ArrayList to hold Integer objects
ArrayList<Integer> numbers = new ArrayList<Integer>();
for(int i = 0; i < 35; i++)
{
numbers.add(i+1);
}
Collections.shuffle(numbers);
答案 1 :(得分:1)
我建议在开始时创建一个大小为0的int数组。然后,创建一个循环来生成随机数,并运行另一个内部循环来运行数组并检查随机数是否已经存在。如果是,则将主循环索引减少1.如果不是,则创建一个大小为主数组+ 1的临时数组,生成主数组大小的循环,将值传递给临时数组,然后输出循环在主数组的长度索引中添加最后一个随机数。
只是一个例子:
int[] nums = new int[0];
Random rnd = new Random();
for (int i = 0; i < 30; i++)
{
bool dup = false;
int rand = rnd.Next(1, 99);
for (int j = 0; j < nums.Length; j++)
{
if (nums[j] == rand)
{
i--;
dup = true;
break;
}
}
if (!dup)
{
int[] tmp = new int[nums.Length+1];
for (int j = 0; j < nums.Length; j++)
tmp[j] = nums[j];
tmp[nums.Length] = rand;
nums = tmp;
}
}
这是未经测试的,我只是写了它。我希望它有所帮助。
答案 2 :(得分:0)
这个怎么样:
创建一个包含1到35之间整数的数组列表:
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 36; i++) {
list.add(new Integer(i));
}
然后从此列表中绘制一个随机数,并将其从列表中删除:
lottoNummerIndex = (int) ((35 * Math.random()) + 1);
lottoNummer[0] = list.get(lottoNummerIndex);
list.remove(lottoNummerIndex);
从剩余列表中抽取下一个数字:
lottoNummerIndex = (int) ((34 * Math.random()) + 1);
lottoNummer[1] = list.get(lottoNummerIndex);
list.remove(lottoNummerIndex);
并重复此操作直至:
lottoNummerIndex = (int) ((29 * Math.random()) + 1);
lottoNummer[6] = list.get(lottoNummerIndex);
list.remove(lottoNummerIndex);
现在你的数组lottoNummer包含7个不同的数字。
答案 3 :(得分:-1)
@Edward Orlowski
所以我收到了错误
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 36; i++) {
list.add(new Integer(i));
}
lottoNummer[0] = (int) ((35 * Math.random()) + 1);
list.remove(lottoNummer[0]);
lottoNummer[1] = (int) ((35 * Math.random()) + 1);
list.remove(lottoNummer[1]);
lottoNummer[2] = (int) ((35 * Math.random()) + 1);
list.remove(lottoNummer[2]);
lottoNummer[3] = (int) ((35 * Math.random()) + 1);
list.remove(lottoNummer[0]);
lottoNummer[4] = (int) ((35 * Math.random()) + 1);
list.remove(lottoNummer[4]);
lottoNummer[5] = (int) ((35 * Math.random()) + 1);
list.remove(lottoNummer[5]);
lottoNummer[6] = (int) ((35 * Math.random()) + 1);
list.remove(lottoNummer[6]);