Foros del Web » Programación para mayores de 30 ;) » Java »

Rellenar matriz con numeros aleatorios

Estas en el tema de Rellenar matriz con numeros aleatorios en el foro de Java en Foros del Web. Hola muy buenas, Estoy haciendo un metodo al que tu le pases un tamaño y cree una matriz cuadrada de ese tamaño y que la ...
  #1 (permalink)  
Antiguo 13/12/2012, 10:13
Avatar de DCienfuegos  
Fecha de Ingreso: febrero-2009
Ubicación: Asturias
Mensajes: 195
Antigüedad: 15 años, 9 meses
Puntos: 3
Pregunta Rellenar matriz con numeros aleatorios

Hola muy buenas,

Estoy haciendo un metodo al que tu le pases un tamaño y cree una matriz cuadrada de ese tamaño y que la rellene aleatoriamente con numeros del 1 al 50

¿Como podria ser? Yo he hecho esto pero no me funciona.. Gracias!

Código:
    /**
     * Crea la matriz con un tamaño que se le pasa por teclado
     * 
     * @param  int tamaño matriz
     */
    public void crearMatriz(int tamaño)
    {
        if(tamaño>0 && tamaño <= MAX_SIZE) 
        this.tamaño=tamaño;
        {
            int matriz[][] = new int[tamaño][tamaño];
            Random r = new Random();            // para generar aleatoriamente
        
                for(int i=0; i<matriz.length; i++) {
                    for(int j=0; j<matriz[0].length; j++) {  // recorro la matriz
                        matriz[i][j] = matriz[r.nextInt(50+1)][r.nextInt(50+1)];  //relleno aleatoriamente
                    }
                }
            }
    }
}
  #2 (permalink)  
Antiguo 13/12/2012, 10:44
Avatar de iivo94  
Fecha de Ingreso: febrero-2011
Ubicación: Argentina
Mensajes: 281
Antigüedad: 13 años, 9 meses
Puntos: 3
Respuesta: Rellenar matriz con numeros aleatorios

yo hice esto
Código:
public class JavaApplication17 {

    static public void lamatrix(int x){
        Random rnd = new Random();
        int[][] matriz = new int[x][x];
        for (int i=0; i<matriz.length; i++){
            for (int r=0; r<matriz[i].length; r++){
                matriz[i][r]=rnd.nextInt(50);
                System.out.println(matriz[i][r]);}}
    }
    public static void main(String[] args) {
        lamatrix(5);
    }

}
no se si es lo que querias XD pero seguro es parecido
  #3 (permalink)  
Antiguo 13/12/2012, 10:48
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: Rellenar matriz con numeros aleatorios

en la definicion de los bucles sustituye toda referencia a matriz.length por tamano, y no uses eñes para las variables.

El ultimo bucle
for(int j=0; j<tamano; j++) { // recorro la matriz
Random r = new Random();
matriz[i][j] = r.nextInt(50+1); //relleno aleatoriamente
}
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #4 (permalink)  
Antiguo 13/12/2012, 11:43
Avatar de DCienfuegos  
Fecha de Ingreso: febrero-2009
Ubicación: Asturias
Mensajes: 195
Antigüedad: 15 años, 9 meses
Puntos: 3
Respuesta: Rellenar matriz con numeros aleatorios

Gracias! lo probare a ver que tal ;)
  #5 (permalink)  
Antiguo 14/12/2012, 03:23
Avatar de DCienfuegos  
Fecha de Ingreso: febrero-2009
Ubicación: Asturias
Mensajes: 195
Antigüedad: 15 años, 9 meses
Puntos: 3
Pregunta Respuesta: Rellenar matriz con numeros aleatorios

Tengo la matriz echa con el siguiente codigo:

Código:
public void crearMatriz(int size)
    {
        if(size>0 && size <= MAX_SIZE) 
        this.size=size;
        {
            int matriz[][] = new int[size][size];        
                for(int i=0; i<size; i++) {
                    for(int j=0; j<size; j++) {          // recorro la matriz
                        Random r = new Random();         // para generar aleatoriamente
                        matriz[i][j] = r.nextInt(50+1);  //relleno aleatoriamente
                    }
                }
            }
    }
Todo compila y se deja ejecutar, pero cuando voy a ver la matriz, sus campos estan null (salvo el de dimensiones), vamos, que no me rellena aleatoriamente la matriz con los numeros, me lo deja vacio.. ¿Por que?
  #6 (permalink)  
Antiguo 14/12/2012, 03:47
Avatar de DCienfuegos  
Fecha de Ingreso: febrero-2009
Ubicación: Asturias
Mensajes: 195
Antigüedad: 15 años, 9 meses
Puntos: 3
Respuesta: Rellenar matriz con numeros aleatorios

Cita:
Iniciado por DCienfuegos Ver Mensaje
Tengo la matriz echa con el siguiente codigo:

Código:
public void crearMatriz(int size)
    {
        if(size>0 && size <= MAX_SIZE) 
        this.size=size;
        {
            int matriz[][] = new int[size][size];        
                for(int i=0; i<size; i++) {
                    for(int j=0; j<size; j++) {          // recorro la matriz
                        Random r = new Random();         // para generar aleatoriamente
                        matriz[i][j] = r.nextInt(50+1);  //relleno aleatoriamente
                    }
                }
            }
    }
Todo compila y se deja ejecutar, pero cuando voy a ver la matriz, sus campos estan null (salvo el de dimensiones), vamos, que no me rellena aleatoriamente la matriz con los numeros, me lo deja vacio.. ¿Por que?
Ya esta solucionado, estaba declarando la matriz como una nueva en local y no como la generica de la clase, tenia que haber puesto matriz = new int[size][size];
  #7 (permalink)  
Antiguo 14/12/2012, 06:50
Avatar de DCienfuegos  
Fecha de Ingreso: febrero-2009
Ubicación: Asturias
Mensajes: 195
Antigüedad: 15 años, 9 meses
Puntos: 3
Respuesta: Rellenar matriz con numeros aleatorios

Tengo que hacer mas Métodos, ahora me toca hacer metodos que me gire la matriz 90º a la derecha osea que si es una de 4x4 la fila 1 cambie a columna 4 la fila 2 a columna 3 y asi...

Seria recorriendo una fila de la matriz, llamarla con un atributo auxiliar y luego al final del bucle declarar a ese auxilar como la columna, no?
  #8 (permalink)  
Antiguo 14/12/2012, 06:58
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: Rellenar matriz con numeros aleatorios

Crea una matriz auxiliar y haz para cada elemento

matrizAux[i][j] = matriz[j][i]

Luego solo tienes que sustituir la matriz original por la auxiliar y ya se mostraría lo que quieres.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #9 (permalink)  
Antiguo 14/12/2012, 09:29
Avatar de DCienfuegos  
Fecha de Ingreso: febrero-2009
Ubicación: Asturias
Mensajes: 195
Antigüedad: 15 años, 9 meses
Puntos: 3
Respuesta: Rellenar matriz con numeros aleatorios

Cita:
Iniciado por Fuzzylog Ver Mensaje
Crea una matriz auxiliar y haz para cada elemento

matrizAux[i][j] = matriz[j][i]

Luego solo tienes que sustituir la matriz original por la auxiliar y ya se mostraría lo que quieres.

Gracias ;)
  #10 (permalink)  
Antiguo 14/12/2012, 10:05
Avatar de DCienfuegos  
Fecha de Ingreso: febrero-2009
Ubicación: Asturias
Mensajes: 195
Antigüedad: 15 años, 9 meses
Puntos: 3
Respuesta: Rellenar matriz con numeros aleatorios

Cita:
Iniciado por Fuzzylog Ver Mensaje
Crea una matriz auxiliar y haz para cada elemento

matrizAux[i][j] = matriz[j][i]

Luego solo tienes que sustituir la matriz original por la auxiliar y ya se mostraría lo que quieres.

En realidad haciendolo de esta forma no lo hace bien ya que por ejemplo el elemento 1,1 seria el mismo entonces la matriz no habria girado.. yo lo que tengo que hacer es que ocurra esto:

Matriz1:

1 2 3
4 5 6
7 8 9

---> Metodo girar 90º derecha

Matriz1:

7 4 1
8 5 2
9 6 3
  #11 (permalink)  
Antiguo 14/05/2015, 21:47
Avatar de joncaldejcs  
Fecha de Ingreso: marzo-2015
Ubicación: valle del cauca
Mensajes: 3
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Rellenar matriz con numeros aleatorios

amigos buenas noches en este caso para mi es algo similar pero debo aplicarlo en una cadena de markov

Diseñar e implementar una aplicación en el lenguaje de programación de predilección que permita
calcular una matriz de transición en n-pasos, y calcular la probabilidad al cabo de k etapas.
Con ayuda de un generador de números pseudo-aleatorios simular las ventas realizadas por cinco
vendedores de una empresa cualquiera, en los cinco primeros meses del año anterior.
Permitir al usuario de la aplicación calcular mediante una cadena de Markov cual sera el porcentaje de
ventas al cabo de k meses. Donde k es ingreso por el usuario.
Visualizar la matriz inicial de ventas, el vector de probabilidad inicial y finalmente el vector de
probabilidades final con el porcentaje de ventas calculado.


mi progreso es este en el codigo es este
package usamultiplicacion;

import java.util.Scanner;

public class Multiplicacion

{ // Abre clase Multiplicacion

//Si se quiere multiplicar matrices de distinta dimension
//solo hay que cambiar los valores de M, N y P
private int M = 2;
private int N = 2;
private int P = 2;

private int Matriz1[][] = new int[N][M];
private int Matriz2[][] = new int[M][P];
private int Matriz3[][] = new int[N][P];

Scanner entrada = new Scanner(System.in);
private String r;
private int[] numeses;


//Metodo Recibe_Entradas1
public void Recibe_Entradas1()


{ // Abre metodo Recibe_Entradas1


System.out.printf("\nEste programa multiplica una matriz de %d columnas y %d renglones", M, N);
System.out.printf(" con una de %d columnas y %d renglones\n\n", P, M);

System.out.print("\nAqui se reciben las entradas de la primera matriz " );
System.out.printf("de %d filas y %d columnas.\n", M, N );


for ( int i = 0; i < N; i++ )
for ( int j = 0; j < M; j++ )

{ // Abre for
System.out.printf("\nIntroduzca el numero de meses que desea calcular: \n\n ");
System.out.printf("Introduzca el valor de la entrada en el renglon %d y la columna %d: ", i + 1, j + 1 );
Matriz1[i][j] = entrada.nextInt();
} // Cierra for
} // Cierra metodo Recibe_Entradas1



public void Recibe_Entradas2( )

{ // Abre metodo Recibe_Entradas2

System.out.print("\nAqui se reciben las entradas de la segunda matriz " );
System.out.printf("de %d filas y %d columnas", M, P);

for ( int i = 0; i < M; i++ )
for ( int j = 0; j < P; j++ )
{ // Abre for
System.out.printf("\nIntroduzca el valor en el renglon %d y la columna %d: ", i + 1, j + 1 );
Matriz2[i][j] = entrada.nextInt();
} // Cierra for

} // Cierra metodo Recibe_Entradas2



// Metodo Multiplicar
public void Multiplicar( )

{ // Abre metodo Multiplicar

for ( int k = 0; k < N; k++)
{ // abre primer ciclo for
for ( int j = 0; j < P; j++)
{ // abre el segundo ciclo for
for ( int i = 0; i < M; i++ )
Matriz3[ k ][j ] += Matriz1[k][i]*Matriz2[i][j];

} // Cierra el segundo ciclo for
}

} // Cierra el metodo Multiplicar




void Imprimir( )
{ // Abre metodo Imprimir
// Aqui se imprimen la dos matrices y la matriz producto
int i, j, k;

System.out.printf("\n\nAQUI SE IMPRIMEN LAS DOS MATRICES Y EL PRODUCTO: \n\n");
for ( i = 0; i < N; i++ )
{ // abre for que controla numero de renglones

// Este ciclo imprime la primera matriz
// No hay ningun problema para imprimir la primera matriz, ya que se
// trata de un par de ciclos for. Sin embargo se quiere imprimir las
// tres matrices, lo cual hace un poquito mas complicado el asunto.
// De todas formas la primera se imprime renglon por renglon
// solo que antes de pasar al siguiente renglon, se escriben las entradas
// correspondientes de la segunda y tercera matrices.

for ( k = 0; k < M; k++)
{ // Abre ciclo for
System.out.printf("%3d", Matriz1[i][k]);
// Se imprime el renglon i de la matriz 1
} //Cierra ciclo for

System.out.printf("\t\t"); // Esta instruccion separa una matriz de otra

// Este ciclo imprime la segunda matriz

for ( j = 0; j < P; j++)
{ // abre for
if ( i <= (N - 1)) // El numero de columnas de la segunda matriz puede ser
// menor o mayor que el numero de filas de la primera
// Si es mayor no pasa nada, pero si es menor se estara
// haciendo referencia a un elemento inexistente en el arreglo
// El caso en el que N > M se trata fuera del ciclo controlado por i
// El -1 es debido a que i empieza a correr en cero

System.out.printf("%3d", Matriz2[i][j]); // se imprime el renglon i de la matriz 2

else // De lo contrario solo se imprimen 3 espacios en blanco
// correspondientes con 3d

System.out.printf(" ");
} // Cierra for

System.out.printf ("\t\t"); // Esta instruccion separa la matriz 2 de la matriz
// producto

// Este es el ciclo que imprime la matriz producto
for ( j = 0; j < P; j++ )
{ // abre for
System.out.printf("%3d", Matriz3[i][j]);
// se imprime el renglon i de la matriz producto
} // Cierra for

System.out.printf("\n");
// Aqui se cambia de renglon
} // Cierra for que controla numero de renglones

// Es probable que N > M, por lo cual en el ciclo anterior no se
// imprimiria la segunda matriz en su totalidad
// Con el siguiente bloque se imprime lo que falta

if ( M > N)
{ // Abre if
int l = N;

while ( l < M )
{ // Abre while
for ( i = 0; i < M; i++)
System.out.printf(" ");
System.out.printf("\t\t\t");
for ( j = 0; j < P; j++ )
System.out.printf("%3d", Matriz2[l][j]);
System.out.printf("\n"); // Aqui se cambia de linea
l++; // Se incrementa el numero de linea
} // Cierra while
} // Cierra if
} // Cierra metodo Imprimir

} // Cierra clase Multiplicacion
  #12 (permalink)  
Antiguo 15/05/2015, 06:05
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años, 7 meses
Puntos: 31
Respuesta: Rellenar matriz con numeros aleatorios

Valores matriz[3][3]:
1 2 3
4 5 6
7 8 9

Coordenadas matriz[3][3]:
00 01 02
10 11 12
20 21 22

Valores deseados matriz [3][3]:
7 4 1
8 5 2
9 6 3

Coordenadas deseadas matriz[3][3]:
20 10 00
21 11 01
22 12 02

De qué forma recorrerías la matriz[3][3] para que al leerla pudieras ir escribiendo en otra matriz auxiliar y te diese la deseada?
como empiezas por la coordenada [2][0], luego pasas a la [1][0] y luego a la [0][0]?
Luego tienes que continuar con la [2][1], luego pasas a la [1][1] y luego a la [0][1]?
Luego tienes que terminar con la [2][2], luego pasas a la [1][2] y luego a la [0][2]

Si te das cuenta, primero recorres las j de 0 a 2, y para cada j recorres la i de 2 a 0.

Ahora solo te queda averiguar como hacer que al recorrer las posiciones desde [i][j] te den las que tú deseas para así ir asignando los valores a una matriz auxiliar. (pista: 2-contador te dará un orden inverso desde 2 hasta 0). En cuanto lo averigües tendrás tu solución.

Última edición por Kritik; 15/05/2015 a las 06:28

Etiquetas: matriz, numeros, rellenar, aleatoria
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:42.