En esta entrada vamos a escribir un método Java que llene un array de
enteros con números aleatorios.
Los números aleatorios deberán estar comprendidos entre dos límites (desde, hasta) ambos incluidos.
El método recibe como parámetros los valores desde, hasta y el tamaño del array.
El método devuelve mediante return el array de enteros creado.
Para obtener números enteros aleatorios usaremos el método nextInt() de la clase Random.
Para que los números aleatorios obtenidos estén dentro de los limites <desde, hasta> utilizaremos el método nextInt() de la siguiente forma:
nextInt(hasta - desde + 1) + desde
Los números aleatorios deberán estar comprendidos entre dos límites (desde, hasta) ambos incluidos.
El método recibe como parámetros los valores desde, hasta y el tamaño del array.
El método devuelve mediante return el array de enteros creado.
Para obtener números enteros aleatorios usaremos el método nextInt() de la clase Random.
Para que los números aleatorios obtenidos estén dentro de los limites <desde, hasta> utilizaremos el método nextInt() de la siguiente forma:
nextInt(hasta - desde + 1) + desde
public static int [] llenarArrayAleatorio(int desde, int hasta, int tam){
int[] numeros = new int[tam];
Random rnd = new Random();
for (int i = 0; i < numeros.length; i++) {
numeros[i] = rnd.nextInt(hasta - desde + 1) + desde;
}
return numeros;
}
Si los números no se pueden repetir debemos complicar un
poco más el código.
En este caso cada vez que se obtiene un número aleatorio se debe comprobar si ya está en el array.
Para hacer este trabajo vamos a escribir un método llamado comprobarSiContiene. A este método se le envía el array, la posición del elemento actual y el número aleatorio a insertar y devuelve true si el número ya existe en el array. En ese caso se vuelve a sacar otro número aleatorio.
En este caso cada vez que se obtiene un número aleatorio se debe comprobar si ya está en el array.
Para hacer este trabajo vamos a escribir un método llamado comprobarSiContiene. A este método se le envía el array, la posición del elemento actual y el número aleatorio a insertar y devuelve true si el número ya existe en el array. En ese caso se vuelve a sacar otro número aleatorio.
public static int[] llenarArrayAleatorio(int desde, int hasta, int tam) {
int[] numeros = new int[tam];
Random rnd = new Random();
int n;
for (int i = 0; i < numeros.length; i++) {
do {
n = rnd.nextInt(hasta - desde + 1) + desde;
} while (comprobarSiContiene(numeros, i, n));
numeros[i] = n;
}
return numeros;
}
public static boolean comprobarSiContiene(int[] numeros, int indice, int valor) {
for (int i = 0; i < indice; i++) {
if (numeros[i] == valor) {
return true;
}
}
return false;
}
Esta sería la solución para aquellos que están empezando a
programar. Pero en este caso nos podemos ahorrar trabajo utilizando la API de
Java. En concreto utilizando un ArrayList y el método shuffle de Collections.
La idea
es llenar un ArrayList con todos los números comprendidos entre los límites
desde/hasta. A continuación se llama al método shuffle para desordenarlos y
después se pasan al array de enteros los tam
primeros elementos, donde tam es el tamaño del array a devolver.
El método
utilizando el ArrayList y Collections.shuffle quedaría así:
private static int[] llenarArrayAleatorio(int desde, int hasta, int tam) {
ArrayList<Integer> array = new ArrayList<>();
for (int i = desde; i <= hasta; i++) {
array.add(i);
}
Collections.shuffle(array);
int [] numeros = new int[tam];
for(int i = 0; i < numeros.length; i++){
numeros[i]=array.get(i);
}
return numeros;
}
gracias por sus aportes, no encontraba un codigo + explicacion de una fomra baica y entendible, sin tanto lenguaje tecnico
ResponderEliminargracias por compartir tu conocimiento
ResponderEliminary en una matriz seria con la misma temática o cambiaría ala hora de comparar ??? gracias por su atención
ResponderEliminaren el metodo comprobarsicontiene que debe ir en int []numeros, indice y valor?
ResponderEliminarHola, necesito una Matriz N*N que genera valor al azar, que los valores no se repitan, que permita buscar un valor de la matriz que me indique la posición y que finalmente me organice la matriz en orden. Apenas estoy comenzando y no he podido dar con la solución.
ResponderEliminarEsta grandioso!! me sirvió a la perfección!!
ResponderEliminarMuchas gracias!
GUAWWWW, gracias, ME HABEIS SALVADO LA VIDA!!!!!
ResponderEliminarMe ha servido muchísimo!! Gracias por ponerlo de manera fácil y comprensible.
ResponderEliminarCRACK
Donde le das un valor a "Tam"?
ResponderEliminarTam contiene el tamaño del array y normalmente se pedirá por teclado y se envía al método
ResponderEliminarY cómo se haría el método main? no consigo recuperar los datos de "numeros". Gracias
ResponderEliminarEn el main llamamos al método de esta forma:
Eliminarint [] arrayNumeros = llenarArrayAleatorio(desde, hasta, tamaño);
a las variables desde y hasta se les habrá asignar antes los valores correspondientes y la variable tamaño contendrá el tamaño del array a crear. También podemos poner en la llamada al método directamente estos valores sin utilizar variables.
Despues recorremos arrayNumeros, por ejemplo con un for, para acceder a su contenido.
De acuerdo, mucha gracias Enrique, estoy haciendo todos tu ejercicios y me están ayudando mucho a aprender.
ResponderEliminarCopio y pego el código del método main por a alguien le sirve de ayuda.
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
int desde, hasta;
int tam;
int i;
System.out.print("Desdel el número = ");
desde=sc.nextInt();
System.out.print("Hasta el número = ");
hasta=sc.nextInt();
tam=hasta-desde;
for(i=0; i<tam; i++) {
int [] arrayNumeros = llenarArrayAleatorio(desde, hasta, tam);
System.out.print(arrayNumeros[i] + ", ");
}
System.out.print(".");
}
rectifico la la siguiente linea:
Eliminartam=hasta-desde+1; //faltaba añadir +1 para que incluyo ambos números, del "desde" al "hasta".
Me alegro de que los ejercicios te estén siendo útiles. Gracias por el comentario, tan solo una aclaración: la variable tam indica el tamaño del array y es independiente de los números aleatorios. Podemos tener por ejemplo un array de 10 elementos con números aleatorios desde 4 hasta 50.
EliminarEsta parte nt [] arrayNumeros = llenarArrayAleatorio(desde, hasta, tam); va antes del for, el for solo se utiliza para recorrer el array que ya esta lleno
Eliminarint [] arrayNumeros = llenarArrayAleatorio(desde, hasta, tam);
for(i=0; i<tam; i++) {
System.out.print(arrayNumeros[i] + ", ");
}
Hola buenas tardes
ResponderEliminarMe podrían apoyar
Necesito un programa que simule un token bancario
Me pueden apoyar por favor con esto
Gracias por su atención
ayudarme, Escribir un programa que llene un arreglo con los números enteros comprendidos entre 4
ResponderEliminary 14 y mostrar el contenido del arreglo?