Capítulo 6. Ayudando a Bud. Números aleatorios
Tengo noticias de mi abogado y no son nada buenas. Mi ordenador fue utilizado para acceder a una página delictiva donde se facilitaban servicios para hackear los sistemas de seguridad de empresas. Pero eso no es todo, este software está siendo utilizado en estos momentos para extorsionar a varias multinacionales.
La policía cree que ideé el plan junto con algún cómplice y que este aún sigue en libertad. Imagino que piensan que es Chani. Ojalá lo atrapen para que se pueda aclarar todo este asunto. Mientras tanto, defenderme de las acusaciones es muy difícil. Mi ordenador estuvo involucrado y poca gente cree que lo utilizaran sin mi permiso.
Las declaraciones de Rich son las únicas que pueden ayudarme. Ha venido a visitarme en un par de ocasiones y me ha comentado que ha hablado varias veces con la policía para explicarles cómo llegó mi portátil a manos de Chani. Incluso les comentó que en nuestra casa no cerrábamos las puertas con llave y que dejábamos nuestros aparatos electrónicos en cualquier lugar.

La verdad es que no soy muy optimista. Imagino que Chani habrá huido lejos. Si no le detienen, voy a pasar bastantes años aquí. De nuevo, vuelvo a pensar en cómo cambia la vida en un instante. No he hecho absolutamente nada y ahora debo pagar por un delito del que no tengo nada que ver. Lo peor es que no puedo hacer nada. Solo me queda esperar a ver qué pasa. Mi círculo social se ha visto reducido drásticamente; antes llenaba la casa de amigos los fines de semana. Ahora, prácticamente solo hablo con Bud y una vez al día con las visitas que recibo del exterior. Mi familia está muy preocupada y sé que están tratando de ayudarme desde fuera. No me siento solo, pero a veces echo en falta tener más compañía
Al menos tengo a Bud; pasamos casi todo el día hablando. La mayor parte del tiempo, de tonterías, nada serio. Es mejor tener la cabeza despejada e intentar desconectar un poco. A veces me pregunta por mi situación y sigue los avances, pero la verdad es que ni siquiera yo sé lo que está pasando.
Bud tiene suerte; puede pasar gran parte del día con el ordenador. Incluso puede salir de la celda en muchas ocasiones para ayudar a los empleados de la cárcel con distintas tareas informáticas. Quizás, si aprendo, yo también podré echar una mano. Puede ser una buena oportunidad para aprender cosas, entretenerme y, de paso, ver si pueden reducir mi condena.

A Bud le encanta enseñar y continuamente me hace preguntas sorpresa. Me ha dicho que, si me aplico, es posible que me dé un trabajillo o que al menos me deje ayudarle. Tenemos un trato. Va a enseñarme cómo operar con números aleatorios en Java y después me hará un pequeño examen. Si lo supero, me dejará ayudarle.
Trabajando con números aleatorios
Importancia de los números aleatorios en Java
Los números aleatorios se utilizan constantemente en todo tipo de programas. Pueden servirnos, entre otras cosas, para simular eventos aleatorios en juegos y simulaciones, generar datos para pruebas de software, y optimizar algoritmos mediante decisiones aleatorias.
Además, son vitales en la seguridad informática para crear claves y en el análisis de datos para modelar distribuciones estadísticas. En resumen, los números aleatorios en Java son herramientas versátiles que mejoran la robustez, la seguridad y el rendimiento de los sistemas informáticos en diversas aplicaciones.
Generación de Números Aleatorios con Math.random
Antes de nada, debes saber que no hay una única forma de generar números aleatorios. Voy a mostrarte la que, según mi punto de vista, es la más sencilla. En Java, la generación de números aleatorios se puede realizar utilizando la clase Math y su método estático random(). El número que obtenemos es mayor o igual a 0.0 y menor que 1.0. Esto significa que puede generar números como 0.0, pero nunca alcanza 1.0 (es decir, 0.999999999… es el valor máximo posible).
Como puedes observar tenemos alguna limitación, pero nada que no podamos solucionar con un poco de imaginación y creatividad.
Ahora, veamos cómo utilizar Math.random() en la práctica para generar números aleatorios en Java:
– Generamos un número aleatorio entre 0.0 (inclusive) y 1.0 (exclusivo)
double numero = Math.random(); System.out.println("Número aleatorio generado: " + numero);
– Generamos un número aleatorio entre dos cifras. Utilizando decimales.
Para ello utilizamos la siguiente estructura:
double numero = Math.random() * (max - min) + min;
Por ejemplo, si queremos crear un número aleatorio entre 10.0 (Incluido) y 100.0 (Excluido) lo haremos de la siguiente forma:
double numero = Math.random() * (100 - 10) + 10; System.out.println("Número aleatorio entre 10.0 y 100.0: " + numero);
– Generamos un número aleatorio entre dos cifras sin decimales.
int numero = (int) (Math.random() * (max – min +1) + min);
Hay dos cambios en esta línea de código. Lo primero que vemos es la utilización de (int). Gracias a eso, nuestra sintaxis pasa de referirse a una variable decimal a una entera. Fíjate que el resto de la línea también va entre paréntesis. Comienza justo antes de Math.random() y acaba al final. Esto, básicamente, lo que hace es eliminar todos los decimales. Por ejemplo, si nuestro número aleatorio es 88.87, ahora será 88.
Si seguimos con el ejemplo y queremos números que vayan del 10 al 100, antes podíamos conseguir cifras que iban desde 10.00 hasta 99.999999… Por lo tanto, si les quitamos los decimales, lo que tenemos es un rango entre 10 y 99. El problema es que no incluye el
100. Eso nos lleva al siguiente cambio, que es el +1. Al añadir ese elemento, se soluciona nuestro problema, ya que el rango ahora se amplía hasta 100.99999…, que al convertirse en natural nos da 100. De este modo, ya tenemos el rango de números aleatorios que necesitábamos, 10-100.
Redondear el número de decimales utilizando el método Math.round()
En el segundo tema ya te expliqué dos formas de redondear la cantidad de decimales y evitar así una larga cola de números. Como ya te prometí en ese momento, aquí te traigo otra manera de conseguirlo. A mi juicio, la más sencilla, aunque consideraba importante añadir las otras dos en este libro. Como ya has visto en el título de este apartado, vamos a utilizar el método Math.round(), el mismo que llevamos todo el tema utilizando para generar números aleatorios. Te lo explico directamente con ejemplos.
Redondeando a dos decimales:
public class Main {
public static void main(String[] args) {
double numero = 3.14159;
double resultado = Math.round(numero * 100.0) / 100.0;
System.out.println("Número con dos decimales: " + resultado);
// Output: 3.14
}
}
Redondeando a tres decimales:
public class Main {
public static void main(String[] args) {
double num = Math.random() * 10;
double resultado = Math.round(num * 1000.0) / 1000.0;
System.out.println("Número aleatorio redondeado a tres decimales: " + resultado);
}
}
Resumen de lo aprendido
Los números aleatorios son esenciales en la programación en general. Se utilizan, entre otras cosas, para simular eventos aleatorios en juegos y simulaciones, generar datos para pruebas de software u optimizar algoritmos. Además, son cruciales en la seguridad informática, sirven para crear claves criptográficas y en el análisis de datos para modelar distribuciones estadísticas. Estos usos mejoran la seguridad y el rendimiento de los sistemas informáticos.
En Java, existen varias formas de generar números aleatorios, pero nosotros nos vamos a centrar en una en concreto. Los crearemos utilizando la clase Math y su método random(). Este método produce números entre 0.0 (inclusive) y 1.0 (exclusivo). Con ese rango numérico estamos un poco limitados, pero eso no es ningún problema ya que con ingenio podemos acceder a otros valores.
Para generar un número aleatorio entre dos números decimales, se usa la fórmula Math.random() * (max – min) + min.
Para obtener un número entero aleatorio en un rango específico, se convierte el resultado a un entero y se ajusta el rango añadiendo 1, garantizando así la inclusión del valor superior en el rango.