Archivo categoría Java
Función Random
En todos los lenguajes de programación modernos existe una manera de generar numeros aleatorios. Esta funcionalidad es necesaria en informática, y por lo tanto para todas las areas en las que influye.
La aleatoriedad se utiliza en teoría de juegos, criptografía, estadística, simulaciones y en general para cualquier fín en el que se desea un resultado no predecible. Esto no quiere decir no acotado.
En realidad los numeros aleatorios no son tal. Simplemente son series de numeros muy largas y complejas (o simplemente sin sentido) por lo que no se hace posible predecir el siguiente numero de la serie, por eso también se pueden encontrar llamados como pseudo-aleatorios.
Hace un tiempo ví que se comentaba el fallo en la funcion random en PHP en windows. El problema venía de la posible precibilidad de la función, por lo que la convertía en inútil. Aquí podeis encontrar el ejemplo que comento y como se acabó solucionando.
Con un sencillo programa en Java podemos comprobar que este lenguaje no sufre esa deficiencia.

Función Random en Java
Incluso Podemos hacerlo algo más artístico y generar colores aleatoriamente:

Si quereis probar a generar puntos aleatorios aquí está el código:
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.util.Random;
import javax.imageio.ImageIO;
public class RandomImage {
public static void main(String args[]){
Random r=new Random();
int num=r.nextInt();
int x=350;
int y=350;
BufferedImage bi = new BufferedImage(x,y,BufferedImage.TYPE_INT_RGB);
for(int i=0; i<x; i++){
for(int j=0; j<y; j++){
num=Math.abs(r.nextInt()%2);
if(num==1){
bi.setRGB(i, j, 0xFFFFFF);
}
else{
bi.setRGB(i, j, 0x000000);
}
}
}
try{
ImageIO.write((RenderedImage)bi,"png", new File("randomJava.png"));
}
catch(Exception e1){}
}
}
En general los métodos de generación de numeros pseudoaleatorios tanto en Java como en .Net se aunto inician con la hora del sistema. La hora en milisegundos se utiliza como semilla. Es una forma de escojer una posición inicial en la serie de numeros preexistiente. Es por esto que no hay que instanciar un objeto ‘Random’ cada vez que queramos un numero aleatorio, porque si se instancian dos objetos en el mismo milisegundo (cosa más posible de lo que parece a primera vista) las dos llamadas generarían el mismo numero.
Es por esto que exísten los metodos nextInt(), nextDouble() y en general nextCualquierCosa para generar el siguiente numero aleatorio en el formato deseado.