2015-02-06 29 views
0

嗨我如何避免在我的代碼中獲取重複的「彩票」?我如何避免在我的Int數組中獲取相同的數字?

現在的問題是一切工作正常,排序,隨機數字,使其成爲一個字符串。 的問題是,如果我例如想要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

在你的'getTicket'方法,你可以實現一個循環,以保持生成隨機數,直到有沒有重複。 – 2015-02-06 15:49:17

+0

http://stackoverflow.com/questions/28095667/fill-an-array-with-unique-random-numbers – assylias 2015-02-06 15:50:08

回答

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個不同的號碼。

+0

嗨,我做到了,但我得到一個錯誤 – Mammuth 2015-02-06 16:22:27

+0

請注意,在每一個下一個抽獎中,我們少了一個數字,所以當你畫第二個數字時,你將隨機數乘以34,然後乘以33. – 2015-02-06 16:31:51

+0

hmm ..這樣做,它仍然給我重複:/ [2,2,6,7,22,26,33] – Mammuth 2015-02-06 16:35:05

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

我建議在開始時創建一個大小爲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; 
      } 
     } 

這是未經測試,我只是寫的。我希望它有幫助。

-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]); 
相關問題