2017-05-14 41 views
0

我使用收集洗牌,但它不工作到目前爲止,我去與此。如何使我的隨機數唯一和排序的數

import java.util.Random; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Collections; 

public class TotoMachine { 
    public static void main(String[] args) { 
     int[] array = new int[7]; 
     Random rand = new Random(); 
     for (int i = 0; i < array.length; i++) 
      array[i] = rand.nextInt(65) + 1; 
     //Collections.shuffle() 
     Arrays.sort(array); 
     System.out.println(Arrays.toString(array)); 
    } 
} 
+1

你究竟想要做什麼,插入隨機數本身就足夠了,不需要再次拖動它們。 – Fairoz

+0

但我的輸出數字可能只重複洗牌可以使它獨特的權利? –

+0

假設您需要檢查陣列中是否存在現有的數字,並且只有在新的數字時才插入。 –

回答

0

假設你可以嘗試像這樣工作。 希望你熟悉List

public static void main(String[] args){ 
      List<Integer> array = new ArrayList<Integer>(); 
      Random rand = new Random(); 
      int num; 
      for (int i = 0; array.size() < 7 ; i++){ 

       num = rand.nextInt(65) + 1; 
       if(!array.contains(num)){ 
        array.add(num); 
       } 
      } 

      Collections.sort(array); 
      System.out.println(array.toString()); 
      }  
} 
+0

這可能會給你少於7個數字,如果一個數字產生兩次 – SilverNak

+0

@SilverNak感謝指出。我編輯。 –

0

這可能工作:將生成的隨機數添加到Set直到某個尺寸。然後將其轉換爲如下陣列:

import java.util.*; 

class random{ 
    public static void main(String[] args){ 
    int max=65; 
    int min=0; 
    int size=7; 

    Set<Integer> set = new HashSet<Integer>(); 
    Random random = new Random(); 
    while(set.size()<size){ 
     int randomNum = random.nextInt((max - min) + 1) + min; 
     set.add(randomNum); 
    } 
    Integer[] intArray= set.toArray(new Integer[set.size()]); 
    Arrays.sort(intArray); 
    for(int i=0;i<size;i++){ 
     System.out.println(intArray[i]+" ");  
    } 
    } 
} 
0

您可以使用Set來實現唯一的數字。例如,你可以試試這個:

import java.util.Arrays; 
import java.util.HashSet; 
import java.util.Random; 
import java.util.Set; 

public class TotoMachine { 
    public static void main(String[] args) { 
     int[] array = new int[7]; 
     Random rand = new Random(); 
     Set<Integer> set = new HashSet<>(); 
     while (set.size() < array.length) { 
      set.add(rand.nextInt(65) + 1); 
     } 
     int i = 0; 
     for (Integer integer : set) { 
      array[i] = integer; 
      i++; 
     } 
     Arrays.sort(array); 
     System.out.println(Arrays.toString(array)); 
    } 
} 

如果您有任何機會使用已經創建set,做其轉換爲int[]陣列所以不是。如果您可以自由使用Integer[]代替int[]的,你可以把它轉換是這樣的:

Integer[] arr = new Integer[7]; 
set.toArray(arr); 
0

我建議你使用Collections,特別是Set(S)。您可以創建一個LinkedHashSet<Integer>並添加所需數量的隨機值。然後,您可以將這些值添加到TreeSet<Integer>(這是排序的)。喜歡的東西,

Random rand = new Random(); 
final int SIZE = 7; 
Set<Integer> set = new LinkedHashSet<>(SIZE); 
while (set.size() < SIZE) { 
    set.add(rand.nextInt(65) + 1); 
} 
System.out.println(set); 
Set<Integer> sortedSet = new TreeSet<>(set); 
System.out.println(sortedSet); 

你可以使用流和Collector

List<Integer> list = set.stream().sorted().collect(Collectors.toList()); 
System.out.println(list); 
0

您可以使用Set數據結構以這種方式使獨特的隨機數:

添加每個新的隨機元素到Set,那麼你只有將它添加到 數組,如果它是獨特的元素。

public static void main(String[] args) { 
    int[] array = new int[7]; 
    int randomNum; 
    Set<Integer> numbers = new HashSet<>(); //Set of unique elements 
    Random rand = new Random(); 
    for (int i = 0; i < array.length; i++){ 
     randomNum = rand.nextInt(65) + 1; 
     numbers.add(randomNum); 
     if(!numbers.contains(randomNum)){ // if unique element add it to array 
      array[i] = randomNum; 
     } 
     else{ // keep generating new random numbers until you get unique element 
      while(numbers.contains(randomNum)){ 
       randomNum = rand.nextInt(65) + 1; 
      } 
      numbers.add(randomNum); 
      array[i] = randomNum; 
     } 
    } 
    Arrays.sort(array); 
    System.out.println(Arrays.toString(array));    
} 

我希望這將解決您的問題。

+0

@ Thomas.Chan嘗試這個我認爲它的工作! – Oghli

1

試試這個。

public static void main(String[] args) { 
    Set<Integer> set = new TreeSet<>(); 
    Random rand = new Random(); 
    while (set.size() < 7) 
     set.add(rand.nextInt(65) + 1); 
    System.out.println(set); 
} 
0

如果不使用set:你可能會這樣做。

生成隨機數。看到

檢查數組,如果隨機數存在

如果不存在 - 插入隨機數到數組。

如果存在生成新的隨機數並重覆上述步驟。

直到你的數組被填充到容量爲止。

這種方法可以做很多與遞歸更甜。

否則使用集合:集合不包含任何重複。

然後,您可以將您的設置轉換爲數組,如一些示例所示。