Comparar elementos en una matriz para duplicados

Intento generar una matriz int 5 dígitos en Java y tengo problemas para comenzar. Ninguno de los números en la matriz puede ser duplicados. Puedo generar números aleatorios para la multa, pero no puedo averiguar cómo comparar los números entre sí y reemplazar cualquier duplicado.

Puede usar un java.util.Set en lugar de una matriz, ya que se garantiza que solo tiene elementos únicos.

Si te entiendo correctamente, ¿quieres un número aleatorio de 5 dígitos, sin dígitos repetidos?

Si es así, una forma es mezclar una lista de los dígitos 0-9, luego elegir los primeros 5 elementos.

EDITAR

 Integer[] digits = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; Random random = new Random(); public Integer[] generateId() { List id = Arrays.asList(digits); Collections.shuffle(id, random); return id.subList(0, 5).toArray(new Integer[0]); } 

Puede deshacerse de los duplicados convirtiendo la matriz en un TreeSet (que también los ordenará):

 int numbers[] { 4 5 7 6 5 7 5 89 847 7 94 093 02 10 11 10 11 }; TreeSet set new TreeSet(Arrays.asList(numbers)); for (int no : set) System.out.println(no); 

esto lo genera en O (número de dígitos), sin bucles internos, sin barajar <- esto podría ser costoso si el número de opciones se vuelve realmente grande

 int[] digits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; Random random = new Random(); int[] generateId() { int[] choices = digits.clone(); int[] id = new int[5]; for (int i = 0; i < 5; i++) { // one less choice to choose from each time int index = random.nextInt(choices.length - i); id[i] = choices[index]; // "remove" used item by replacing it with item at end of range // because that index at the end won't be considered in next round choices[index] = choices[choices.length - i - 1]; } return id; } 

prueba esto:

 int[] digits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; Random random = new Random(); int[] generateId() { int[] clone = digits.clone(); int[] id = new int[5]; for (int i = 0; i < 5; i++) { int candidate; do { candidate = random.nextInt(10); } while (clone[candidate] == -1); id[i] = clone[candidate]; clone[candidate] = -1; } return id; } 

Como alternativa, simplemente ordene la matriz y itérela.

  List myList = new List() { 1, 1, 2, 3, 4, 5, 5, 7 , 1, 7}; myList.Sort(); for (int i = myList.Count - 1; i > 0; i--) { if (myList[i] == myList[i - 1]) myList.RemoveAt(i); } 

Pero, por supuesto, es mejor no obtener ningún duplicado para empezar.

En primer lugar, quiero agradecerles a todos por ayudar, realmente lo aprecio.

Tengo este progtwig para que funcione de la manera que quiero, pero parece que debería haber una manera más fácil. Aquí esta lo que hice. Cualquier otro comentario sería increíble.

 do { for (int i = 0; i < 5; i++) { iNumber = generator.nextInt(9) + 1; numbers[i] = iNumber; } } while(numbers[0] == numbers[1] || numbers[0] == numbers[2] || numbers[0] == numbers[3] || numbers[0] == numbers[4] || numbers[1] == numbers[2] || numbers[1] == numbers[3] || numbers[1] == numbers[4] || numbers[2] == numbers[3] || numbers[2] == numbers[4] || numbers[3] == numbers[4]); 
 /** * findDuplicate method return map where key is unique no and value as the * repitation * * @param a * : arrays of Objects * @return map */ public Map findDuplicate(T[] a) { Map map = new HashMap(); Set unique = new HashSet(Arrays.asList(a)); int count = 0; for (T integer : unique) { for (T integer1 : a) { if (integer == integer1) { ++count; } } map.put(integer, count); count = 0; } return map; }