我如何避免在我的Int数组中获得相同的数字?

时间:2015-02-06 15:44:38

标签: java arrays int duplicates

您好我如何避免获得重复的彩票#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;
} 



}

4 个答案:

答案 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]);