Generar números aleatorios no repetidos en Java

En este articulo les mostrare un método para crear o generar números aleatorios sin repetirse en Java.

Una de las preguntas que siempre me hacen es ¿como generar números sin repetirse en java? Pues si ponemos una condición, esta solo sera valida la primera vez, así que hay una alta posibilidad de que en el segundo llamado nos salga un numero repetido.

Para obtener números aleatorios sin repetir java hay muchas formas o métodos para hacerlo, mediante matrices, arreglos, vectores, etc.

En realidad, cuando creamos numeros al azar es muy probable que se nos generen números aleatorios repetidos.

En este tutorial post, explicaré como rellenar un ArryaList de números sin repetirse. ¿Porque un ArrayList y no un array? básicamente porque el ArrayList tiene un método llamado contains().

Tabla de contenido
  1. ¿Como sacar números aleatorios no repetidos?
    1. ¿Como crear numeros aleatorios o randon sin repetir en java?
  2. Codigo java usado durante el tutorial

¿Como sacar números aleatorios no repetidos?

Lo que haremos es crear un método recursivo en Java que nos permita hacer un numero indefinido de validaciones, es decir, puede verificar muchas veces si el numero salio repetido.
Los métodos recursivos en java son muy sencillos de usar, así que no se preocupen.

En este post te mostrare como hacer un método recursivo y te explicare paso a paso.

Recomendado:   APP INVENTOR: uso de CONDICIONALES BÁSICOS IF | ELSE Y IF ELSE

Aunque si quieres saber mas te recomiendo leer Recursividad en Java.

¿Como crear numeros aleatorios o randon sin repetir en java?

En el siguiente vídeo explico de manera detallada como hacerlo, pues he considerado que es más fácil aprender con vídeos que simplemente dejandoles el código.

Como pudieron ver, es muy simple tanto la generación o creación de números aleatorios no repetidos en Java, como la programación de algoritmos recursivos.

Codigo java usado durante el tutorial

import java.util.ArrayList;
import java.util.Random;

public class NombresAleatorios {
	
	
	/**
	 * 
	 * @param cantidad cantidad de numeros no repetidos a crear. Debe ser menor al limite del Random
	 * @return arreglo de numeros no repetidos.
	 */
	public static ArrayList<Integer> generarAleatoriosNoRepetidos (int cantidad) {
		ArrayList<Integer> respuesta = new ArrayList<>();
		for (int i = 0; i < cantidad; i++) {
			respuesta.add(gen(respuesta));
		}			
		return respuesta;
	}
	
	/**
	 * Metodo recursivo que crea un numero aleatorio, pero primero verifica si existe en el arreglo del parametro.
	 * Si el numero ya existe, el metodo se llama a si mismo para hacer otro intento y asi sucesivamente hasta
	 * encontrar un numero aleatorio que no exista en el arreglo
	 * @param a Arreglo de numeros aleatorios que previamente guarados
	 * @return numero que no existe en el arreglo a dado.
	 */
	public static int gen(ArrayList<Integer>a) {
		Random ra = new Random();	
		int numero = ra.nextInt(11);
		if (!a.contains(numero)) {
			return numero;
		}else {
			return gen(a);
		}
	}
	

	/**
	 * Este metodo solo imprime la respuesta
	 * @param num arreglo a imprimir
	 */
	public static void imprimir (ArrayList<Integer>num) {
		for (int i = 0; i < num.size(); i++) {
			System.out.println(num.get(i));
		}
	}
	
	
	public static void main(String[] args) {
		
		//aqui llamas el metodo con la cantidad de numeros que quieres no repetidos. Recordemso que no podemos crear numeros no repetidos mayores al limite del generador Random
		imprimir(generarAleatoriosNoRepetidos(10));
	}
}

¿Te gusta Java o estas aprendiendo a programar en Java? ¿Quieres conocer algunos trucos para ser más pro a la hora de programar?, sé que la respuesta es si, pues entonces te recomiendo leer este articulo en donde doy algunos trucos para programar en Java.

Recomendado:   COMO cambiar el TAMAÑO Y COLOR DE LAS LETRAS en JAVA ECLIPSE LUNA

Subir