Random - Sortear números - Juego de adivinar número

Aprenderemos cómo generar números aleatorios usando objetos Random. Con la excusa de aprender a usar Random y practicar lo aprendido en el anterior tutorial, crearemos nuestro primer juego.

Random

Los objetos de la clase Random, nos permite generar números aleatorios. Una vez creado el objeto Random, podemos pedirle números, usando diferentes métodos. Los más usados son:

Campo seed o semilla

Los objetos Random tienen una campo llamado seed. Puede ser modificado usando random.setSeed(long seed) o en el constructor Random(seed).

Normalmente, cuando generamos secuencias usando random, no se repiten. Si antes de generar la secuencia, ponemos la semilla a un valor fijo, siempre generará la misma secuencia.  

El uso de seed, puede ser interesante cuando queremos probar o testear modificaciones, con los mismos datos.

package com.edu4java.javatutorials;
import java.util.Random;

public class RandomExample {
	public static void main(String[] args) {
		Random r = new Random(1); // pone al campo seed en uno
		int i = 0; // es una variable contador
		while (i < 20) {
			i++; // es lo mismo que i = i + 1;
			System.out.print(r.nextInt(100) + ","); 
		}
	}
}

 

Como se pasa al constructor new Random(1) la secuencia siempre es la misma:

85,88,47,13,54,4,34,6,78,48,69,73,17,63,62,34,92,62,96,89,

Si cambiamos el constructor por Random() podrán ver que cambia con cada ejecución.

 

 

Juego para adivinar un número

En el siguiente ejemplo, vemos como hacer un juego para adivinar un número, con lo que hemos aprendido hasta ahora.

package com.edu4java.javatutorials;

import java.util.Random;
import javax.swing.JOptionPane;

/**
 * @author edu4java
 * 
 *         El programa sortea un número entre 0 y 99 y pide al usuario repetidamente 
 *         que adivine el número. Cada vez que se equivoca, le indica si el número es 
 *         mayor o menor. Cuando acierta, le indica cuantos intentos fallidos realizó.
 */
public class GameGuess {
	public static void main(String[] args) {
		Random r = new Random();
		int adivinar = r.nextInt(100); // genera un número entre 0 y 99
		int i = 0; // crea variable contador que es usada para contar los intentos fallidos
		int apuesta = input("Adivina el número secreto entre 0 y 99. ¿Que número es?");
		while (adivinar != apuesta) { // si el número dado es distinto al sorteado repite
			i++; // incrementa variable contador
			if (adivinar > apuesta) {
				apuesta = input("El número a adivinar es más grande. \n Intentelo otra vez");
			} else {
				apuesta = input("El número a adivinar es más chico. \n Intentelo otra vez");
			}
		}
		JOptionPane.showMessageDialog(null,
				"Felicitaciones ha dado con el número con " + i + " intentos fallidos");
	}

	/**
	 * Muestra una ventana con el mensaje text y solicita una respuesta
	 * 
	 * @param text
	 * @return devuelve un número int
	 */
	private static int input(String text) {
		return Integer.parseInt(JOptionPane.showInputDialog(text));
	}
}

El método input(String text) se ha creado para hacer más claro el código del programa.  

El código está documentado (explicado) en el mismo programa. Esta es una costumbre muy valorable.