En java existen varios métodos para poder generar elementos aleatorios. Según lo que vayamos a necesitar elegiremos un método u otro. Para lograr un determinado objetivo, serán varias las opciones posibles, aquí veremos algunas.
Una de las formas, es utilizar la clase Random del módulo util.
En el siguiente código, creamos un objeto de la clase Random. Con el método .nextInt(numero), creamos un número entero aleatorio en una unidad inferior al número que contiene como argumento, en este caso genera un número entero aleatorio entre 0 y 6 (nunca será 7).
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random aleatorio = new Random();
for (int k=1;k<20;k+=1){
int numero = aleatorio.nextInt(7); // Entre 0 y 7
System.out.print(numero+"-");
}
}
}Posible resultado:
2-2-5-3-4-5-5-4-3-4-3-1-4-4-3-6-4-1-4-Podemos hacer que el número elegido esté comprendido entre un mínimo y y máximo determinados. El truco está en agregar el valor mínimo al número buscado. También tendremos que restarlo al número que incluimos como argumento (ya que vamos a sumárselo después). En el siguiente ejemplo, vamos a buscar números aleatorios comprendidos entre 7 y 20 (ambos incluidos).
Como podemos comprobar, el valor mínimo será el 7 (ya que si el aleatorio es 0, le sumamos 7). El valor máximo será 20 y se corresponde con el valor máximo generado (13) al cual le añadimos 7).
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random aleatorio = new Random();
for (int k=1;k<20;k+=1){
int numero = aleatorio.nextInt(14)+7; // Entre 7 y 20
System.out.print(numero+"-");
}
}
}Posible resultado:
7-7-13-14-14-18-15-19-19-20-14-14-12-20-10-14-16-12-20-Vamos a construir ahora una forma de obtener números aleatorios, teniendo en cuenta un valor mínimo, un valor máximo y que los números sean elegidos con saltos, en este caso con saltos de 3 en 3.
En el siguiente código, el valor mínimo será 7 (lo que sumamos al final), el valor máximo será 37 (30+7). Los números serán elegidos con salto de 3 unidades, ya que el número elegido inicialmente, será dividido entre 3 y nos dará la división entera. Por lo tanto, los números iniciales serán 0/3=1, 1/3=0….,3/3=1, 4/3=1,…..
Este número inicial será multiplicado por 3, lo que nos dará 0,3,6,9….y finalmente le sumaremos 7 (el mínimo valor permitido).
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random aleatorio = new Random();
for (int k=1;k<20;k+=1){
int numero = (aleatorio.nextInt(31))/3*3+7; // Entre 7 y 20
System.out.print(numero+"-");
}
}
}Posible resultado:
37-16-7-10-25-25-13-31-25-7-13-7-13-7-13-28-28-28-34-Basándonos en la clase Random, podemos construir una rutina que nos elija uno o varios elementos aleatorios entre los existentes en una lista.
A continuación, vamos a elegir 4 colores al azar entre una lista de colores. Los elementos obtenidos podrán mostrarse en pantalla, añadirse a otra lista, a un archivo…
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Main {
public static void main(String[] args) {
List<String> colores=new ArrayList<>();
colores.add("verde");
colores.add("amarillo");
colores.add("blanco");
colores.add("rojo");
colores.add("naranja");
colores.add("morado");
colores.add("gris");
colores.add("marrón");
Random aleatorio = new Random();
for (int k=1;k<5;k+=1){
int numero = (aleatorio.nextInt(5)); // Entre 7 y 20
System.out.print(colores.get(numero)+"--");
}
}
}Posible resultado:
verde--amarillo--verde--naranja--En el siguiente código vamos a crear un conjunto de 4 elementos elegidos al azar entre la lista de colores. Como se trata de un conjunto, no va a admitir que aparezcan colores duplicados, es decir si alguno se repite no se añadirá al conjunto.
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
public class Main {
public static void main(String[] args) {
List<String> colores=new ArrayList<>();
Set<String> lista_colores = new HashSet<>();
colores.add("verde");
colores.add("amarillo");
colores.add("blanco");
colores.add("rojo");
colores.add("naranja");
colores.add("morado");
colores.add("gris");
colores.add("marrón");
Random aleatorio = new Random();
while (lista_colores.size()<4) {
int numero = (aleatorio.nextInt(5)); // Entre 7 y 20
lista_colores.add((colores.get(numero)));
}
System.out.println(lista_colores);
}
}Posible salida:
[naranja, amarillo, rojo, verde]