Math.

random()
La llamada a Math.random() devuelve un número aleatorio entre 0.0 y 1.0, excluido este último valor, es decir, puede devolver 0.346442, 0.2344234, 0.98345,.... En muchas de nuestras aplicaciones no nos servirá este rango de valores. Por ejemplo, si queremos simular una tirada de dado, queremos números entre 1 y 6 sin decimales. Debemos echar unas cuentas para obtener lo deseado. En primer lugar, miramos cuántos valores queremos. En nuestro caso del dado son 6 valores, del 1 al 6 ambos incluido. Debemos entonces multiplicar Math.random() por 6 (que es (maximo-minimimo)+1, es decir, (6-1)+1)
Math.random()*6 // Esto da valores de 0.0 a 6.0, excluido el 6.0

Como nuestro primer valor es 1, le sumamos 1 al resultado
Math.random()*6 + 1 // Esto da valores entre 1.0 y 7.0 excluido el 7.0

Finalmente, para conseguir un entero, quitamos los decimales usando la clase Math.floor()
int valorDado = Math.floor(Math.random()*6+1);

En general, para conseguir un número entero entre M y N con M menor que N, debemos usar esta fórmula
int valorEntero = Math.floor(Math.random()*(N-M+1)+M); y N, ambos incluidos. // Valor entre M

Si no queremos un valor entero sino double, la fórmula es sin el +1
double valorAleatorio = Math.random()*(N-M)+M;

eso sí, recuerda que el valor N queda excluido y no saldrá nunca.

Clase java.util.Random
La clase java.util.Random debemos instanciarla, a diferencia del método Math.random(). A cambio, tendremos bastantes más posibilidades. Podemos usar un constructor sin parámetros o bien pasarle una semilla. Si instanciamos varias veces la clase con la misma semilla, tendremos siempre la misma secuencia de números aleatorios.
Random r1 = new Random(); Random r2 = new Random(4234); Random r3 = new Random(4234); // r2 y r3 darán la misma secuencia.

el siguiente for genera 5 números aleatorios for(int i = 1. // Entre 0 y 5.random()). De todas formas.out.random() El método random() de la clase Math devuelve un número al azar positivo de tipo double mayor o igual que 0.Lo más fácil es usar el constructor sin parámetros. Generación de números aleatorios en Java Podemos generar números aleatorios en Java de dos formas distintas: 1. Utilizando la clase Random 1. que devuelve un valor entre 0 y n. Utilizando el método estático random de la clase Math: Math. int valorDado = r. que normalmente dará secuencias distintas en cada instancia. Generar números aleatorios utilizando Math. Con esta clase. una manera de obtener una semilla que sea distinta cada vez que ejecutemos nuestro programa puede ser obtener el tiempo actual en milisegundos con System. excluido n Random r = new Random().random() 2. que dará números distintos salvo que hagamos la instacia justo en el mismo instante de tiempo.9552201267900652 .println(Math.0 y menor que 1.currentTimeMillis().6586423340678433 0. más 1.35474701449674206 0. usando el método nextInt(int n).0 Por ejemplo. una vez instanciada.nextInt(6)+1. genera 5 números aleatorios que podrían ser estos: 0. i<=5. nuestro problema del dado sería bastante más sencillo. i++) System.

0. Se encuentra en el paquete java.util.05210677512170114 Para obtener un número entero entre 1 y un límite N. i<=5.random()*N + 1). HASTA.random()*(HASTA-DESDE+1)+DESDE).random()*6 + 1)). Para obtener un número aleatorio utilizando la clase Random debes seguir estos pasos: 1. Por ejemplo. para generar 5 números enteros al azar entre 8 y 15: for(int i = 1.println((int)(Math. hay que multiplicar el número aleatorio obtenido por N. i<=5. ambos incluidos.println((int)(Math. debemos usar la fórmula: (int)(Math. Generar números aleatorios utilizando la clase Random La clase Random proporciona un generador de números aleatorios más flexible que el método random de la clase Math anterior.8309552833908893 0.out.Random. i++) System. i++) System. Para obtener un número entero entre dos valores DESDE . 2.util.random()*(15-8+1)+8)).out. Por ejemplo. Importar la clase: import java. sumarle 1 y convertirlo a entero: (int)(Math. . para obtener 5 números aleatorios enteros entre 1 y 6: for(int i = 1.

0 Por ejemplo.println(rnd. i++) .out. for(int i = 1. Utilizar uno de los métodos de la clase para obtener el número Algunos métodos de la clase Random: nextInt() devuelve un número entero positivo o negativo dentro del rango de enteros.nextInt()). nextDouble() Devuelve un número positivo de tipo double mayor o igual que 0.2. i<=5. para generar 5 enteros al azar: Random rnd = new Random().0 y menor que 1. Crear un objeto de la clase Random 3. Un posible resultado de este for es: -394395199 1133763686 -424454120 1147379979 -2049113297 Para generar 5 enteros entre 0 y 6: for(int i = 1. nextInt(int n) devuelve un número entero >=0 y menor que n. i<=5. i++) System.

println(rnd.println(""). ambos incluidos: rnd. } System.nextInt(7)).nextInt(HASTA-DESDE+1)+DESDE Por ejemplo.out.out. Para generar 5 enteros entre 1 y 6: for(int i = 1.System.out.out.println(rnd. para generar enteros al azar entre dos límites DESDE .out.nextDouble()).println("").println("Primera secuencia"). i++) { System. for (int i = 0. Comprobaremos que los números que aparecen en las dos secuencias son distintos.println("Segunda secuencia"). para generar 5 números aleatorios entre 10 y 20: for(int i = 1.nextInt(6)+1). } System.nextDouble()). System. En general.out. i++) System.nextInt(20-10+1)+10). System.println(rnd. i < 5. 1). i++) System. Secuencias de números aleatorios En la siguiente porción de código. for (int i = 0. i<=5. HASTA. se imprime dos secuencias de cinco números aleatorios uniformemente distribuídos entre [0. .out.out. i < 5.print("\t"+rnd. separando los números de cada una de las secuencias por un carácter tabulador.out.print("\t"+rnd. i<=5. i++) { System.

} System. //Cuenta las veces que aparece un número ndigitos[n]++.out. i++) { System. i < 5.out. } // verificar que los números aleatorios están uniformente distribuídos for (long i=0. for (int i = 0. Random rnd = new Random(). i++) { System.println("Primera secuencia").out. int n. import java.nextDouble() * 10.nextDouble()). i++) { // genera un número aleatorio entre 0 y 9 n = (int)(rnd.print("\t"+rnd.nextDouble()). package azar.out.out. i < 5.0).println(""). i < 10. System. 1).out. System.print("\t"+rnd.println("").out.println(""). i < 5.print("\t"+rnd. i < 10.setSeed(3816). rnd. rnd.out.out.println("Segunda secuencia"). // Inicializar el array for (int i = 0. i++) { System.En la siguiente porción de código.out.print("\t"+rnd.println("Primera secuencia"). } System. for (int i = 0. Se establece la semilla de los números aleatorios con la función miembro setSeed.out. i++) { System. .out.nextDouble()).setSeed(3816). se imprime dos secuencias iguales de números aleatorios uniformemente distribuídos entre [0.Random. i++) { System. System. for (int i = 0. } System. } //Dos secuencias de 5 número (distinta semilla) System.println("Segunda secuencia"). i < 5. for (int i = 0. public class AzarApp { public static void main (String[] args) { int[] ndigitos = new int[10]. i++) { ndigitos[i] = 0. i < 100000L. } // imprime los resultados for (int i = 0.nextDouble()).util.println(i+": " + ndigitos[i]).

for (int i = 0.println(""). } } matrices public class matrices { public static void main (String[] args) { int a=5.out.println(). //Dos secuencias de 5 número (misma semilla) rnd. transpuesta.setSeed(3816L).println(""). System. determinante.} System.out. i < 5.j++) { matriz[i][j]=(int)(Math. } System.out.out. i++) { System. multiplicacion. en este caso a es el tamaño de la matriz cuadrada int matriz[][]=new int[a][a]. // Ingresa un numero aleatorio a la posicion [i][j] System.nextDouble()). // asi se declara una matriz for (i=0.setSeed(3816). inversa.j. System. .i++) { for(j=0.out.i. resta. rnd.i<a.println("Segunda secuencia"). for (int i = 0.print("\t"+rnd. i < 5. } System.println("").println("Primera secuencia").out. // Muestra el numero de la posicion [i][j] } System.j<a.nextDouble()).random()*10).out.print(" "+matriz[i][j]).print("\t"+rnd.out. i++) { System.out. //Para bajar una linea (En la impresion) } } } Hoy el programa completo para realizar operaciones de matrices como son la suma. //declaras variables.

out.readLine()).A . break. } private static void sumar() throws IOException { if(fila==fila2 &amp.B n " ). public static int opc. /** * * @author paxx */ public class Matriz { static BufferedReader entrada =new BufferedReader(new InputStreamReader(System. /** * @param args the command line arguments */ public static void main(String[] args) throws IOException { do { System.print("8. colum. break. System.Introducir matriz A n " ).A ^ -1 n " ). import java. break.SALIR n " ). break.print("0.out.print("4. import java.InputStreamReader..print("5..print("1.BufferedReader.print("Elige una opcion " ). System. case 4: restar(). break.Det(A) n " ). System. case 3: sumar().out.. System. case 7:traa(). switch(opc){ case 1: matriz1(). colum2.out.print("7. break.out. case 2: matriz2(). case 6: deta().A + B n " ).&amp.print("2. System. public static double [][] m1.print("6.parseInt( entrada. case 5: multi().print("3...out. fila. System. opc=Integer.out.out.io.IOException.print("Opcionesn " ). System.out. break.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 import java.in))..Introducir matriz B n " ). System.A * B n " ).out. break.. public static double [][] m2...out. colum==colum2) . fila2.A ^ t n " ).io. case 8:inva(). } }while(opc!=0). System. System.io.

out. m1= new double [fila][colum].parseInt( entrada. } } } private static void sumar2() { if(fila==fila2 &amp.parseDouble( entrada.out.&amp.fila. } } } private static void matriz2() throws IOException { System. } .out.parseInt( entrada.j++){ System.out.colum. m2[i][j]=Double.y&lt. colum=Integer.colum.parseInt( entrada. for(int i=0.out. "+(j+1)+" ]" ).out.readLine()).readLine()).x&lt.i++){ for(int j=0. colum==colum2) { for( int x=0.i++){ for(int j=0. System.fila2. colum2=Integer.fila.y++) { System.print("valor de matriz en ["+i+1+" .parseInt( entrada. } System.print("tamaño de columnoas " ). } } private static void matriz1() throws IOException { System. } }else{ System.print("no se pude sumar las matrices " ).j&lt.y++) { System.out.readLine()).print((m1[x][y])+(m2[x][y])+" .colum. m1[i][j]=Double. System.j&lt.print((m1[x][y])+(m2[x][y])+" . ").print("valor de matriz en ["+(i+1)+" .fila.out.y&lt.colum2. "). m2= new double [fila2][colum2]. "+(j+1)+" ]" ).x&lt.i&lt.parseDouble( entrada.print("tamaño de columnoas " ).j++){ System.i&lt. fila2=Integer. for(int i=0. fila=Integer.print("tamaño de filas " ).out.readLine()).x++) { for( int y=0.print("tamaño de filas " ).readLine()).readLine()).out.x++) { for( int y=0.48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 { for( int x=0.print("n").

colum2. ").x++) { for( int y=0.95 96 97 98 99 100 101 102 103 104 105 106 107 108").colum.y&lt.print("no se pude sumar las matrices " ). } . 109 110 111 112 113 114 115 116 117 118 119 120 121 122 ").y++) { System.m&lt.y&lt. } }else{ System. } System. } System.out.out.y++) { for(int m=0.fila.x&lt. } } private static void restar() { if(fila==fila2 &amp.colum.print((m1[x][y])-(m2[x][y])+" .print(r1[x][y]+" . } }else{ System. } } private static void multi() throws IOException { if(colum==fila2) { double [][] r1=new double[fila][colum2].out.print("n"). colum==colum2) { for( int x=0. for(int x=0.x&lt.print("n").colum.out.out. } } private static void restar2() { if(fila==fila2 &amp.y++) { System.out.&amp.print("n").out.m++) { r1[x][y]+=m1[x][m]*m2[m][y].y&lt.print((m2[x][y])-(m1[x][y])+" . } System.out.fila.x++) { for(int y=0.print("no se pude restar las matrices " ). } }else{ System.x&lt.out.x++) { for( int y=0.print("no se pude sumar las matrices " ). 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 System.fila. colum==colum2) { for( int x=0.&amp.

out.length==2){ 178 det=(matriz[0][0]*matriz[1][1])179(matriz[1][0]*matriz[0][1]).y&lt.colum2. } 181 double suma=0.readLine(). 157 } 158 System.length-1][matriz. 184 for(int j=0. i++){ 183 double[][] nm=new double[matriz.i) 188 . } 161 }else{ 162 System.out.length. for(int x=0.length-1].x++) 152 { 153 for(int y=0.x&lt. 180 return det.out.length. j&lt.out. 163 String a=entrada.out.print("No se puede multiplicar matrices").out. j++){ 185 if(j!=i){ for(int k=1. 170 String a=entrada. } 146 } 147 148 private static void multi2() throws IOException { 149 if(colum2==fila) 150 { 151 double [][] r1=new double[fila2][colum]. "). 177 if(matriz.print("n").print(r1[x][y]+" .length. 142 } 143 }else{ 144 System.print("La determinante es : 169"+determinante(m1)).print("La Matriz no tiene determinante").colum.y++) 154 { 155 for(int m=0.print("No se puede multiplicar matrices").m&lt. i&lt. 164 } 165 } 166 private static void deta() throws IOException { 167 if(fila==colum){ 168 System.fila2.matriz.readLine(). }else{ 171 System.matriz.readLine(). 159 } 160 System. 172 String a=entrada. 182 for(int i=0. k&lt.out.readLine(). 187 if(j&lt. 173 } 174 } 175 176 public static double determinante(double[][] matriz){ double det. k++){ 186 int indice=-1.m++) { 156 r1[x][y]+=m2[x][m]*m1[m][y]. 145 String a=entrada.System.matriz.print("n").

out.print("n"). 233 for(int x=0. 205 }else{ 206 System.print("La determinante es : 203 "+determinante(m2)). 213 for(int x=0.out.fila. } 198 return suma. 199 } 200 201 private static void detb() throws IOException { 202 if(fila2==colum2){ System.x&lt. 229 } 230 231 private static void trab() throws IOException { 232 System. 196 else 197 suma-=matriz[i][0] * determinante(nm).print("La matriz original"). 189 else if(j&gt.print("La matriz original").y++) 215 { 216 System. 226 } System.y&lt.out. 218 } 219 System.print("n").x&lt.y&lt.out.x++) { 214 for(int y=0. 191 nm[indice][k-1]=matriz[j][k].colum.out. 192 } } 193 } 194 if(i%2==0) 195 suma+=matriz[i][0] * determinante(nm).y++) 224 { 225 System. 207 String a=entrada.colum.out.print(m1[x][y]+ " .x++) 234 { 235 . 221 System. ").print("n").readLine().print("n"). 222 for(int x=0. 217 } System.out. 227 } 228 String a=entrada.x&lt. 212 System.out. 204 String a=entrada. } 208 } 209 210 private static void traa() throws IOException { 211 System. System.out.x++) { 223 for(int y=0.i) 190 indice=j-1. 220 System.readLine().out.print("La Matriz no tiene determinante").fila2.out. ").print("La matriz transpuesta").print("nn").out.out.indice=j.readLine().fila.print("n").print(m1[y][x]+ " .

} System.i&lt.out. } System. System.readLine().print("nn").&amp. i++){ for(int j=0.res.readLine().print(((res[i][j]*100)/100)+" . for(int x=0. ").out.out.print(m2[y][x]+ " .out.print("n").println("no tiene inversa").j&lt.colum2.out.res. } String a=entrada.out.&amp.236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 for(int y=0.res. ").readLine().y++) { System. }else{ System.print(m2[x][y]+ " .j++){ System. } } public static double[][] matrizInversa(double[][] matriz) { double det=1/determinante(matriz).out.print("n").colum2. for(int i=0. } } private static void invb() throws IOException { if(fila2==colum2 &amp.out.print("n").readLine().fila2.y++) { System. } System.length .length. i++){ for(int j=0.length .print("n"). "). String a=entrada.out.out. } String a=entrada.out. "). for(int i=0.y&lt. } private static void inva() throws IOException { if(fila==colum &amp.j++){ System.j&lt. } String a=entrada.x&lt. determinante(m1)!=0){ double[][] res = matrizInversa(m2). } System.out. double[][] nmatriz=matrizAdjunta(matriz). determinante(m1)!=0){ double[][] res = matrizInversa(m1).print("n").length.println("La matriz no tiene inversa"). .print( ((res[i][j]*100)/100)+" .i&lt. String a=entrada.res.x++) { for(int y=0.out. } System. }else{ System. multiplicarMatriz(det.print("La matriz transpuesta").nmatriz).y&lt.readLine(). System.

length][matriz.matriz. 283 } 284 285 public static void multiplicarMatriz(double n.length2981][matriz. 309 nm[i][j]=detValor * (double)Math.length.length. int indice2=l&lt.length]. 316 for(int i=0.i&lt. 310 } 311 } 312 return nm.pow(-1.j++) { 297 double[][] det=new double[matriz. 299 for(int k=0.k&lt.length.length-1]. double detValor.matriz. i++){ 317 for(int j=0.matriz.matriz. j++) 318 nuevam[i][j]=matriz[j][i].length].j&lt. 292 } 293 294 public static double[][] matrizCofactores(double[][] matriz){ double[][] nm=new double[matriz.j ? l : l-1 .j&lt.j++) matriz[i][j]*=n.length.return nmatriz.matriz.matriz.matriz. i&lt. } 319 return nuevam. 288 } 289 290 public static double[][] matrizAdjunta(double [][] matriz){ 291 return matrizTranspuesta(matrizCofactores(matriz)). double[][] matriz) { 286 for(int i=0.i++) 287 for(int j=0. 305 } 306 } 307 } 308 } detValor=determinante(det).i&lt. j&lt.l&lt.length.length. } 313 314 public static double[][] matrizTranspuesta(double [][] matriz){ 315 double[][]nuevam=new double[matriz[0]. 295 for(int i=0.length.matriz. 304 det[indice1][indice2]=matriz[k][l].l++) { 302 if(l!=j) { 303 int indice1=k&lt.k++) { 300 if(k!=i) { 301 for(int l=0. i+j+2). 320 } 321 322} .length][matriz.i++) { 296 for(int j=0.i ? k : k-1 .length.